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

ASP.net c#尝试在服务器上运行可执行文件,c#,asp.net,iis-7,executable,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

我有一种方法,通过在服务器上运行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);

}
//
///生成新许可证
/// 
public static void GenerateLicense(字符串名称、字符串电子邮件地址、Licensing.Types.LicenseType类型、Licensing.Types.ProductTypes产品)
{
string Params=“\”+授权.Types.LicenseTypeToString(类型)+“\”\”
+Licensing.Types.ProductTypeToString(产品)
+“\”\“”+Name+“\”\“”
+电子邮件地址+“\”;
//启动许可证可执行文件并传入所有参数
Process.Start(Settings.LicenseExecutableLocation,Params);
}
它没有抛出任何错误,而且显然没有运行程序(它应该在服务器上生成一些文件)。可执行文件(Settings.LicenseExecutableLocation)的位置是
C:\inetpub\wwwroot\licensegen.exe
,这是正确的,参数也是正确的(我已经打印出来了)


我正在运行IIS7,它根本没有抛出任何错误,我是否需要更改IIS7中的某些内容?

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


希望这能有所帮助。

因为启动流程时不会出现异常,所以您需要了解它实际上在做什么。我会把你的最后一行改成

var pLicenseGenerator =  Process.Start(Settings.LicenseExecutableLocation, Params);
然后在调试会话中,在等待进程完成其任务几秒钟后,研究pLicenseGenerator对象的属性。这个对象将属于类,我将特别注意
.ExitCode
属性。在设计良好的控制台应用程序中,如果程序遇到错误(如旧的DOS%ERRORLEVEL%变量),该值将设置为非零值

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

当我在过去遇到类似的问题时,我格式化流程输入参数的方式总是有问题。有时,如果参数是长文件路径,则需要特别注意用双引号将其括起来的方式


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

文件根本没有运行(通过检查process explorer进行验证),还是只是没有输出文件?您使用的是Server 2008吗?您是否尝试过从命令行运行该进程?谁在调用此方法?每个web请求(可能不是)或启动代码?可能重复的@Tom我认为Process Explorer()将跟踪进程是否快速打开然后关闭,因此您可以查看它是否真正启动。