Thomas Le 0903 Ответов: 2

Проблема вызов exe-файла в консольном приложении


Всем привет,
У меня есть проблема с вызовом Exe-файла в моем консольном приложении
Вот моя часть кода

try
            {
                System.Diagnostics.Process process1 = new System.Diagnostics.Process();
                System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
                startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
                if (System.Environment.OSVersion.Version.Major >= 6) // Windows Vista or higher
                {
                    startInfo.Verb = "runas";
                }
                else { /*Do nothing*/ }

                startInfo.FileName = @"D:\glstats\glstats.exe";
                startInfo.UseShellExecute = false;
                process1.StartInfo = startInfo;
                process1.Start();
                process1.WaitForExit(); 
            }
            catch (Win32Exception ex)
            {
                log.WriteLine("Exec Batch Mode Failed. ");
                log.WriteLine(ex.ToString());

                log.WriteLine("Program Quit: " + DateTime.Now.ToString());
                log.Close();

                return;
            }


Проблема в том, что процесс "glstats.exe" появляется и закрывается сразу же в считанные секунды.

Есть ли какой-нибудь способ подождать, пока glstats.exe заканчивает пользовательский интерфейс?

Программное обеспечение "glstats.exe" требуется Административное право в Windows 10.

Я застрял с этим уже 2 дня, сегодня я пытаюсь попросить о какой-либо помощи, так как я сделал все рекомендации от Google, но это не сработало.

Я хотел бы оценить ваши комментарии
Спасибо.

Что я уже пробовал:

https://stackoverflow.com/questions/2532769/how-to-start-a-process-as-administrator-mode-in-c-sharp

вот 1-е руководство, которое я прочитал, https://stackoverflow.com/questions/13807429/running-cmd-commands-with-administrator-rights

Graeme_Grant

Вы проверяли process1.ExitCode != 0 чтобы узнать, есть ли проблема? 0 = успех.

Вы вручную пробовали запустить "glstats.exe" как настроено выше, чтобы проверить, что с ним нет проблем?

Thomas Le 0903

Привет Graeme_Grant,
Спасибо за вашу поддержку.

Я проверил process1. ExitCode return "-1".

Пока что я могу запустить его вручную ". glstats.exe " без каких-либо проблем в командной строке.
Вот почему я стараюсь автоматизировать его с помощью консольного приложения.
Я хочу запустить его в определенное время, например, каждые 4 часа.

Graeme_Grant

-1 - это состояние ошибки для этого приложения. Проверьте, что означает это приложение.

PIEBALDconsult

https://www.codeproject.com/Articles/70864/ProcessCommunicator

Thomas Le 0903

Привет PIEBALDconsult,
Спасибо, что дали мне эту статью.
Я пытаюсь понять и попробовать это как еще один способ решить мою проблему.
Спасибо.

2 Ответов

Рейтинг:
10

Thomas Le 0903

Дорогие все,
Большое вам спасибо за поддержку в этом вопросе.
Я уже решил эту проблему.

На самом деле проблема заключается в вводе "аргумента".
Я исправил его, и теперь все в порядке.

решение таково,
У меня должна быть эта кодовая строка

string output = p.StandardOutput.ReadToEnd();

в противном случае glstats.exe убьют через секунду.


BillWoodruff

пожалуйста, оставляйте комментарии либо к конкретному решению, либо к вашему оригинальному сообщению. идея состоит в том, чтобы решения оставались решениями.

Thomas Le 0903

Привет Билл Вудрафф,
Я изменяю свой комментарий как способ решения проблемы.
Надеюсь, это будет полезно для других членов клуба.
Спасибо

Рейтинг:
0

OriginalGriff

Для процесс с повышенными правами, вам также нужно значение свойства useshellexecute :

string appPath = @"...";
string appArgs = @"...";
Process proc = new Process();
ProcessStartInfo si = new ProcessStartInfo(appPath, appArgs);
si.WindowStyle = ProcessWindowStyle.Normal;
si.Verb = "runas";             // UAC elevation required.
si.UseShellExecute = true;     // Required for UAC elevation.
proc.StartInfo = si;
proc.Start();
proc.WaitForExit();
Появится диалоговое окно UAC, пользователь утвердит повышение, приложение запустится. Когда он выходит, управление возвращается в ваше приложение.