通过Windows服务运行的程序能够在Win7和Win8下成功运行以下代码。
Log("About to run the file...");
try
{
Process.Start(filePath, args);
Log("File Triggered!");
}
catch (Exception ex)
{
Log("Error.");
}
虽然位于UI
的程序的filePath
从未显示过,但程序完全在后台完成了工作。
当我在Windows 2012 R2环境中尝试完全相同的程序时,我注意到在我的日志文件中收到上面的第一条日志消息后("关于运行文件...")没有记录了其他内容,Process.Start()
也无效。这很令人困惑,因为完全相同的程序在其他操作系统中工作。
因此,如果未成功调用Process.Start()
,我将不会收到"错误"我的日志中的消息,如果运行Process.Start()
,为什么我没有得到"文件触发!"消息?
更新 在评论之后,我运行了Process Monitor,这是在目标.exe文件应该运行的确切时刻生成的日志。请看一下,看到你发现任何可疑的东西:
答案 0 :(得分:2)
我认为这是因为Windows Server 2012默认情况下不允许进程以交互方式运行。
您可以通过设置注册表项来覆盖此行为:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
NoInteractiveServices
将值设置为" 0"。
答案 1 :(得分:1)
一般的建议:在Windows中从服务启动UI不是最佳做法。创建服务是为了完成一些后台工作而不是用户交互。如果您需要用于服务的UI,更好地创建用户自己启动的UI,创建一个小应用程序,它将位于托盘中并等待服务中的事件,然后在用户所谓的“窗口站”中启动UI。
答案 2 :(得分:0)
Windows Server 2012会阻止从其他位置复制的所有文件。所以我解锁了所有的程序文件。谢谢你的帮助。