【问题标题】:System.Diagnostics.Process.Start() problems on Windows Server 2008Windows Server 2008 上的 System.Diagnostics.Process.Start() 问题
【发布时间】:2011-02-04 11:34:49
【问题描述】:

我需要从一个 c# .net 应用程序启动一个 3rd 方 java 应用程序。最初我想从 asp.net 站点执行此操作,但在遇到权限/特权问题后,我转而尝试从 Windows 服务执行此操作,因为它以系统用户身份运行,我希望能解决我的问题。哦,是的,我在尝试在 Windows 2008 服务器上运行它时出现了问题。在我的 Windows 7 开发环境中一切都很好。

我自然而然地搜索了这些论坛和其他人的答案,但我发现没有任何帮助,所以请招待我。

我有想要在批处理文件中运行的命令,并且正在使用以下代码来启动它。

ProcessStartInfo psi = new ProcessStartInfo(filePathToBatchFile);
        psi.Arguments = "arguments for batch file..."
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        psi.RedirectStandardInput = true;
        Process p = Process.Start(psi);

我正在运行一个批处理文件,主要是因为我想确保某些事情正在发生。我确保所有变量和文件路径都是正确的,并且批处理文件确实在运行。我可以让它做其他事情,比如 xcopy 文件,我可以自己从命令行运行命令,它工作正常。没有抛出异常,也没有来自进程的输出。如果我将路径(到 java 二进制文件、我传递给它的文件等)更改为故意不正确的路径,那么它会抱怨。

我尝试以不同的用户身份运行此进程,即我可以用来登录服务器并手动运行命令的用户。我已从服务属性菜单授予服务访问桌面的权限。

如果有人对这里发生的事情有任何想法,或者甚至对我如何进行诊断有任何提示,我将不胜感激。

【问题讨论】:

  • 能否提供 RedirectStandardOutput 和 RedirectStandardError 的输出,好吗?我们可以在没有关于所发生事情的一些事实的情况下永远“招待”你。因为它是异常的,所有建议 stackoverflow.com/questions/361097/… 应该导致正常执行。
  • RedirectStandardOutput 或 RedirectStandardError 没有输出。

标签: c# asp.net windows-server-2008


【解决方案1】:

您必须为您的应用创建清单或关闭 UAC。

发生的情况是,由于它不是签名的可执行文件,UAC 正在阻止您的服务运行/启动其他应用程序。这就是清单的来源......在 Windows SDK 文档(Applicaiton Manifest)中查找它。

我以前也遇到过这样的问题,最烦的是没有错误:http://msdn.microsoft.com/en-us/library/bb756929.aspx 和这里:http://technet.microsoft.com/en-us/library/xc3tc5xx(VS.80).aspx (better description)

清单教程: http://msdn.microsoft.com/en-us/library/bb756973.aspx (Very Good)

Windows 应用权限和 UAC(Vista、7、2008/R2) http://msdn.microsoft.com/en-us/library/bb756996.aspx

【讨论】:

  • 感谢您的链接!非常感谢您的帮助。在我开始阅读它们之前,我最终意外地解决了这个问题。我没有启动 Java 应用程序,而是找到了一个执行相同操作的 Python 脚本。它工作正常,但我真的不明白为什么调用 Python 可执行文件会使事情有所不同。
猜你喜欢
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2011-04-07
相关资源
最近更新 更多