我们有一个自定义组件,它包含了PowerShell的一些功能,因此它可以在BizTalk 2006中使用。对于大多数操作(检查文件路径,复制或移动文件),这样可以正常工作。但是,我们需要远程启动GUI应用程序以进行一些处理。组件本身处理与远程盒的连接,我们所要做的就是设置一些参数然后告诉它执行一个命令
Start-Process -FilePath "path to exe" -ArgumentList "arguments for exe" -WorkingDirectory "workingdir for exe"
问题是:如果我们从盒子本身的powershell命令行运行它,这可以正常工作。然而,当我们远程启动它时(从BizTalk,从测试工具,甚至使用远程Powershell命令行和通过Start-PSSession连接),此应用程序将短暂运行然后退出而不实际执行任何操作。我怀疑是因为有问题的exe需要加载GUI才能运行该进程,这就是导致问题的原因。我已经尝试了我能想到的一切,包括-NoNewWindow和-WindowStyle,但无济于事。任何帮助实现这项工作都将非常感激。
注意:我们无法访问我们尝试运行的应用程序的源代码,因为它是较旧的win32应用程序,并且未提供此应用程序的批处理或命令行版本。
答案 0 :(得分:18)
使用标准PowerShell方法(WinRM,WMI)无法使用GUI启动应用程序。我所知道的唯一解决方案是使用PsExec from SysInternals(或类似工具)。它可以启动向用户呈现GUI的应用程序。您的命令行将如下所示:
& ".\psexec" -accepteula -i "\\computername" -u "domain\username" -p "password" "command line"
-accepteula
- 默默接受EULA。-i
- 允许GUI。其他解决方案更加苛刻,包括向调度程序远程添加任务。
答案 1 :(得分:7)
自从我最近遇到这个问题以来,这是我使用Discord建议添加远程任务的解决方案。我更喜欢“黑客”而不必设置一个单独的工具。
if NoAds{
print("No Ads")
//topConstraint.constant -= 50
topConstraint.constant = 50 // Avoid using -= or += if this func will call a lot of time
}else{
print("Ads")
// set the default constant you want
topConstraint.constant = 100
loadBanner()
}