我有这种方法,它通过在我们的服务器上运行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中更改某些内容?
答案 0 :(得分:3)
由于您在启动流程时没有收到异常,因此您需要了解它实际执行的操作。我会把你的最后一行改为
var pLicenseGenerator = Process.Start(Settings.LicenseExecutableLocation, Params);
然后在等待几秒钟让进程执行其操作后,在调试会话中调查pLicenseGenerator对象的属性。这个对象属于Process类,我会特别注意.ExitCode
属性。在设计良好的控制台应用程序中,如果程序遇到错误(如旧的DOS%ERRORLEVEL%变量),则将其设置为非零值。
如果.ExitCode
无效,我建议将.StandardOutput转储到网页或文件进行调试。
当我在过去遇到类似的问题时,我对格式化进程输入参数的方式一直存在问题。有时,如果参数是长文件路径,则需要特别注意用双引号将其包装的方式。
一个简单的步骤是吐出您传递给Process.Start()
的确切路径和参数,然后看看当您从命令行自己运行它们时会发生什么。如果他们工作正常,那么可能是某种与许可相关的问题,正如另一张海报推测的那样。
答案 1 :(得分:1)
您可能遇到了权限问题。可执行文件是否与Web应用程序位于同一目录中?如果没有,您可能需要修改权限或查看使用模拟。如果它确实位于同一目录中,则应尝试使用相对路径。您可能还需要取消控制台对话框 - 我遇到了问题。
希望这有帮助。