Я хочу выполнить файл .exe на сервере IIS через ASP веб-страницу btnClick, я использую Server.MapPath - PullRequest
0 голосов
/ 05 августа 2020
protected void Button1_Click(object sender, EventArgs e)
{
    try
    {

        System.Diagnostics.Process process1 = new System.Diagnostics.Process();
        process1.StartInfo.FileName = Server.MapPath(@"~\\bin\\HelloApp.exe");
        process1.StartInfo.Arguments = "";
        process1.Start();
        process1.WaitForExit();
        process1.Close();
    }
    catch (Exception ex)
    {
        Response.Write(ex);
    }
    
}

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Невозможно вызвать другое приложение пользовательского интерфейса из приложения, размещенного в IIS. Из-за того, что нет сеанса пользователя для рендеринга пользовательского интерфейса. Начиная с Windows Vista, существует механизм c, называемый изоляцией сеанса, который разделяет приложение и службу. Однако он будет работать, когда мы запустим приложение с помощью Visual Studio локально, поскольку текущий сеанс наследуется с учетной записью, в которой запущена Visual Studio. Для получения дополнительной информации перейдите по ссылкам ниже. Как запустить процесс из службы WCF, размещенной в IIS? Проблема изоляции сеанса IIS

0 голосов
/ 05 августа 2020

попробуйте этот код и посмотрите, не возникнет ли ошибка. если вы получили сообщение об ошибке, проверьте, есть ли в бункере опубликованного кода HelloApp.exe.

protected void Button1_Click(object sender, EventArgs e)
    {
        string fileNameWithPath = Path.GetFullPath(@"~\\bin\\HelloApp.exe");
        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.Arguments = "";
        startInfo.CreateNoWindow = true;
        startInfo.UseShellExecute = true;

        startInfo.FileName = fileNameWithPath;

            using (Process exeProcess = Process.Start(startInfo))
            {
                exeProcess.WaitForExit();
                StreamReader outputReader = exeProcess.StandardOutput;
                StreamReader errorReader = exeProcess.StandardError;
                string errors = errorReader.ReadToEnd();
                if (!string.IsNullOrEmpty(errors))
                    throw new Exception(errors);
            }

    }
...