簡體   English   中英

從C#問題執行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM