ASP.net c# 尝试在服务器上运行可执行文件

3

我有一个方法,它通过在我们的服务器上运行一个exe程序来生成许可证:

/// <summary>
/// Generate a new license
/// </summary>
public static void GenerateLicense(string Name, string EmailAddress, Licensing.Types.LicenseType Type, Licensing.Types.ProductTypes Product)
{
    string Params = "\"" + Licensing.Types.LicenseTypeToString(Type) + "\" \""
        + Licensing.Types.ProductTypeToString(Product)
        + "\" \"" + Name + "\" \""
        + EmailAddress + "\"";

    // Start license executable and pass in all the params
    Process.Start(Settings.LicenseExecutableLocation, Params);

}

没有任何错误提示,似乎也没有执行程序(应该在服务器上生成一些文件)。可执行文件的位置(Settings.LicenseExecutableLocation)是C:\inetpub\wwwroot\licensegen.exe,这是正确的,并且参数也是正确的(我已经打印出来了)。

我正在运行IIS7,它完全没有抛出任何错误,我需要在IIS7中更改一些设置吗?


文件根本没有运行(通过检查进程资源管理器进行验证),还是只是没有输出文件? - Kyle Trauberman
你正在使用Server 2008吗?你尝试过从命令行运行该进程吗? - John Kalberer
5
可能是重复的问题:System.Diagnostics.Process.Start 在 IIS 中无法工作 - Kyle Trauberman
1
@Tom 我认为Process Explorer(http://technet.microsoft.com/en-us/sysinternals/bb896653)可以追踪进程是否快速打开然后关闭,这样你就可以看到它是否真正启动了。 - Kyle Trauberman
嗯...尝试修改执行权限以允许脚本和可执行文件。我还在下面列出了一些其他建议的名称。 - James Johnson
显示剩余4条评论
2个回答

3

由于在启动进程时未出现异常,您需要找出它实际正在执行的操作。我建议将您的最后一行更改为:

var pLicenseGenerator =  Process.Start(Settings.LicenseExecutableLocation, Params);

然后,在等待进程完成后的几秒钟内,在调试会话中调查 pLicenseGenerator 对象的属性。该对象将是 Process 类的一个实例,我会特别关注 .ExitCode 属性。在设计良好的控制台应用程序中,如果程序遇到错误(如旧的 DOS %ERRORLEVEL% 变量),则会将其设置为非零值。

如果 .ExitCode 没有帮助,建议将 .StandardOutput 转储到网页或文件进行调试。

当我遇到类似问题时,问题通常与我格式化进程的输入参数的方式有关。有时,如果参数是长文件路径,则需要特别注意如何用双引号包装它。

一个简单的步骤是将您传递给 Process.Start() 的确切路径和参数输出,然后从命令行运行它们并查看发生了什么。如果它们正常工作,则可能是某种权限相关问题,正如另一位发帖者所推测的那样。


1
你可能遇到了权限问题。可执行文件是否与 Web 应用程序位于同一目录中?如果不是,则可能需要修改权限或考虑使用模拟身份。如果它确实位于同一目录中,您应该尝试使用相对路径。您还可能需要抑制控制台对话框 - 我曾经遇到过这样的问题。
希望这可以帮助到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接