我正在编写简单的脚本来将项目从 Teamcenter 解档 (rar) 到临时目录,然后运行特定程序 (Mentor),然后再次存档。
我读过很多关于从 PS 启动 exe 的示例,但它们大多与记事本等小型 exe 相关,没有 dll 和其他资源。
在 Powershell Ise 中,脚本完美运行。但是当我从 teamcenter 调用脚本时,Mentor 缺少 dll。
在运行 Mentor 之前,在脚本中,我会:
Get-ChildItem Env:
检查环境变量以及所有变量是否存在。我尝试手动设置环境,如下所示:
$wf_classpath = Get-ChildItem Env:WF_CLASSPATH
[System.Environment]::SetEnvironmentVariable("WF_CLASSPATH", $wf_classpath.Value, "Process")
不起作用。
我尝试设置主文件夹:
$mentor = Start-Process $file.FullName -Wait -WorkingDirectory $workdir
不起作用。
然后我尝试使用环境从脚本中调用批处理文件,但不起作用。
尝试拨打
cmd.exe /c ...
不起作用。
此处为完整脚本,仅在 Powershell Ise 中完美运行,如果我从其他程序调用该脚本,exe 不会启动。
$shell = new-object -com shell.application
$invocation = $MyInvocation.MyCommand.Definition
$rootpath = $PSScriptRoot
$outpath = "$($PSScriptRoot)\out"
$pathtorar = "c:\Siemens\menutils\Rar.exe"
Remove-Item -Recurse -Force $outpath
New-Item $outpath -ItemType directory
$archive = get-childitem $rootpath | where { $_.extension -eq ".rar" } | Select-Object -First 1
$arglist = "x $($archive.FullName) $($outpath)"
Start-Process -FilePath $pathtorar -ArgumentList $arglist -Wait
Remove-Item -Recurse -Force $archive.FullName
$file = get-childitem $outpath -Recurse | where { $_.extension -eq ".prj" } | Select-Object -First 1
Write-Host "$(get-date -Format yyyy-MM-dd-hh-ss)
Start process: $($file.FullName)"
$mentor = Start-Process $file.FullName -Wait
$arglist = "a -m0 -r -ep1 $($archive.FullName) $($outpath)"
Start-Process -FilePath $pathtorar -ArgumentList $arglist -Wait
Remove-Item -Recurse -Force $outpath
Read-Host -Prompt "Press Enter to exit"
从 Powershell Ise 运行脚本与其他程序有什么区别?
我应该如何设置环境变量来从其他脚本/程序运行该脚本?
可能是您的当前目录不正确,并且
WorkingDirectory
根据我的经验是有错误的。如果 dll 不在常规系统路径中,将从当前目录获取它们。
先使用此功能
Start-Process
[IO.Directory]::SetCurrentDirectory($Dir)
我正在挖掘这个话题。我在运行 Word、Excel 的脚本时遇到同样的问题。直接运行时,它可以工作,但是通过 TC,它可以工作,直到调用 Word、Excel 应用程序。或者你发现自己出了什么问题了吗?