[英]Executing commands from C# problem
我已經制作了一個用於監視sidebar.exe的C#工具(有些人知道其中存在奇怪的內存泄漏,因此此監視器在達到限制時會重新啟動sidebar.exe進程...)。
在此之前,我有一個.bat文件,並且我正在手動運行它,並且工作正常。 現在,我正在從C#執行cmd命令,但是行為有所不同:7個小工具中只有4個在“ start sidebar.exe”之后再次出現。 它總是與程序一起發生,而決不會在手動運行時發生。
以.bat或從進程運行命令有什么區別? 我可以解決這個問題嗎?
我也嘗試從進程中運行.bat本身,同樣的問題...
這些命令是:
taskkill /im sidebar.exe /f
.bat或System.Threading.Thread.Sleep(2000);
TIMEOUT /T 2
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可運行的Java,使用一個小的exe來返回sidebar.exe的使用)-完美。 如果有人知道這個C#問題,還是還是會得到一個答案的。
我認為您的問題出在您正在使用的環境中。更多信息會有所幫助,但是您可以嘗試以下方法。
使用System.Diagnostics名稱管理,創建一個ProcessStartInfo對象並提供適當的信息,尤其要確保提供了已登錄用戶的用戶名。
使用此ProcessStartInfo對象作為Process.Start(ProcessStartInfo)調用的參數。
那應該以適當的用戶帳戶啟動該過程。
現在,如果您將其作為服務運行,則可能會遇到其他問題,因為服務無法通過設計服務訪問GUI,因此設計服務並非旨在允許用戶輸入,因此環境也可能受到限制,並且側邊欄可能不會能夠找到其保存的設置。
知道我應該在單擊提交之前點擊刷新:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.