Я создал небольшой инструмент C # для мониторинга sidebar.exe (как некоторые знают, в нем есть странная утечка памяти, поэтому этот монитор перезапускает процесс sidebar.exe, когда он достигает предела ...).
До этого у меня был файл .bat, и я запускал его вручную, и он работал нормально.Сейчас я выполняю команды cmd из C #, но поведение отличается: только 4 из 7 гаджетов снова появляются после «start sidebar.exe».Это всегда происходит с программой, и никогда при ручном запуске.
Какая разница в запуске команд как .bat или из процесса?И можно ли это исправить?
Я также пытался запустить сам .bat из процесса, та же проблема ...
Команды:
taskkill /im sidebar.exe /f
TIMEOUT /T 2
в .bat или System.Threading.Thread.Sleep(2000);
в программе
start sidebar.exe
Обновление: код того, что я пробовал:
Вариант 1 - запустить .bat:System.Diagnostics.Process.Start(@"C:\....restart.bat");
Опция 2 - команды запуска:
...
this.executeCmd("taskkill /im sidebar.exe /f");
System.Threading.Thread.Sleep(2000);
this.executeCmd("start sidebar.exe");
...
private void executeCmd(String command)
{
ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo = psi;
proc.Start();
string result = proc.StandardOutput.ReadToEnd();
System.Console.Out.WriteLine(result);
}
Обновление:
Мне сказали, что это проблема с правами доступа / учетной записью / пользователем, я пытался решить ее безуспешно, но заметил, что в Java этого не происходит, поэтому я объединил Java и C # для этого инструмента (java runnable вызывается при запуске, используя небольшой exe, который возвращает использование sidebar.exe) - работает отлично.Тем не менее, я был бы признателен за ответ, если кто-нибудь знает об этой проблеме C #.