繁体   English   中英

在Win7和Win8而不是Windows 2012 R2下可运行的Process.Start()

[英]Process.Start() working under Win7 and Win8 but not Windows 2012 R2

通过Windows服务运行的我的程序能够在Win7和Win8下成功运行以下代码。

Log("About to run the file...");
try
{
    Process.Start(filePath, args);
    Log("File Triggered!");
}
catch (Exception ex)
{
    Log("Error.");
}

尽管从未显示过位于filePath的程序的UI ,但是该程序完全在后台执行其工作。

当我在Windows 2012 R2环境中尝试完全相同的程序时,我注意到在我的日志文件(“关于要运行该文件...”)中收到上述第一条日志消息后,没有其他记录,并且Process.Start()也不起作用。 这是令人困惑的,因为完全相同的程序可以在其他操作系统中使用。

因此,如果未成功调用Process.Start() ,谁没有在我的日志中收到“错误”消息,并且如果运行了Process.Start() ,为什么我没有得到“文件触发”信息呢? 信息?

更新:根据评论,我运行了进程监视器,这是在目标.exe文件应该运行的确切分钟生成的日志。 请看看,发现有任何可疑的地方:

链接到Google Docs上的日志电子表格

我认为这是因为Windows Server 2012默认情况下不允许进程以交互方式运行。

有关详细信息,请参见此处。

您可以通过设置注册表项来覆盖此行为:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Windows
NoInteractiveServices

将该值设置为“ 0”。

  1. 进程查看器中有什么功能-您看到进程开始了吗?
  2. Windows事件日志中有什么?
  3. Win2012在安全性和应用程序(从服务执行,因此非常特定的用户)方面可能更加严格。 您可以尝试使用SysInternals的FileMon / ProcessMonitor来检查失败或卡在哪个调用。

一条通用建议:从Windows中的服务启动UI并非最佳实践。 创建服务是为了进行一些后台工作,并且没有用户交互。 如果您需要用于服务的UI,则最好创建用户自己启动的UI,或者创建一个小应用程序,该应用程序将坐在托盘中并等待服务中的事件,然后在用户(称为“窗口站”)中启动UI。

Windows Server 2012会阻止从其他位置复制的所有文件。 因此,我解除了所有程序文件的阻止。 谢谢你的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM