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

时间:2011-08-05 22:27:52

标签: c# asp.net iis-7 executable

我有这种方法,它通过在我们的服务器上运行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中更改某些内容?

2 个答案:

答案 0 :(得分:3)

由于您在启动流程时没有收到异常,因此您需要了解它实际执行的操作。我会把你的最后一行改为

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

然后在等待几秒钟让进程执行其操作后,在调试会话中调查pLicenseGenerator对象的属性。这个对象属于Process类,我会特别注意.ExitCode属性。在设计良好的控制台应用程序中,如果程序遇到错误(如旧的DOS%ERRORLEVEL%变量),则将其设置为非零值。

如果.ExitCode无效,我建议将.StandardOutput转储到网页或文件进行调试。

当我在过去遇到类似的问题时,我对格式化进程输入参数的方式一直存在问题。有时,如果参数是长文件路径,则需要特别注意用双引号将其包装的方式。

一个简单的步骤是吐出您传递给Process.Start()的确切路径和参数,然后看看当您从命令行自己运行它们时会发生什么。如果他们工作正常,那么可能是某种与许可相关的问题,正如另一张海报推测的那样。

答案 1 :(得分:1)

您可能遇到了权限问题。可执行文件是否与Web应用程序位于同一目录中?如果没有,您可能需要修改权限或查看使用模拟。如果它确实位于同一目录中,则应尝试使用相对路径。您可能还需要取消控制台对话框 - 我遇到了问题。

希望这有帮助。