ASP.net c # пытается запустить исполняемый файл на сервере - PullRequest
3 голосов
/ 06 августа 2011

У меня есть этот метод, который генерирует лицензию, запустив программу 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 ]

3 голосов
/ 06 августа 2011

Поскольку вы не получаете исключение при запуске процесса, вам необходимо выяснить, что он на самом деле делает.Я бы изменил вашу последнюю строку на

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

, а затем исследовал свойства объекта pLicenseGenerator в сеансе отладки, подождав несколько секунд, пока процесс выполнит свою задачу.Этот объект будет иметь класс Process , и я бы обратил особое внимание на свойство .ExitCode.В хорошо спроектированном консольном приложении это значение будет установлено на ненулевое значение, если программа обнаружила ошибку (например, старая переменная DOS% ERRORLEVEL%.)

Если .ExitCode не помогает,Я бы рекомендовал сбросить .StandardOutput на веб-страницу или в файл для отладки.

Когда в прошлом я сталкивался с подобными проблемами, это всегда было проблемой с тем, какЯ отформатировал входные параметры процесса.Иногда, если параметр представляет собой длинный путь к файлу, вам нужно обратить особое внимание на способ, которым вы заключаете его в двойные кавычки.

Один простой шаг - указать точный путь и параметры, которые вы передаетеProcess.Start(), а затем посмотрите, что произойдет, если вы запустите их самостоятельно из командной строки.Если они работают нормально, то, вероятно, это какая-то проблема, связанная с разрешениями, как предположил другой автор.

1 голос
/ 06 августа 2011

Возможно, вы столкнулись с проблемой разрешений. Находится ли исполняемый файл в том же каталоге, что и веб-приложение? Если нет, вам может потребоваться изменить разрешения или изучить использование олицетворения. Если он находится в том же каталоге, вы должны попытаться использовать относительный путь. Вам также может потребоваться отключить диалоговое окно консоли - у меня возникли проблемы с этим.

Надеюсь, это поможет.

...