2015-10-20 75 views
2

我確實有一個基於Windows的C#應用​​程序調用一個外部scan.exe文件來掃描一個目錄。C#啓動過程多次

下面我做的過程調用代碼:

Process p = new Process(); 
p.StartInfo.FileName = @"Scan.exe"; 
foreach (FileInfo file in fileList) 
{ 
    p.StartInfo.Arguments = @" /ALL /ARCHIVE " + file.FullName; 
    p.Start(); 
    //System.Threading.Thread.Sleep(200); 
} 

當我運行它,該文件scan.exe中彈出(UAC的窗口),在據稱傳遞的每個文件名,在列表中,有六個文件,scan.exe彈出6次。

有沒有辦法可以打開創建一個進程並在for循環中重用它?

謝謝

+0

如果以管理員身份運行流程會發生什麼情況?如果有效,您可以提前申請。 – SimpleVar

+0

您是否有Scan.exe的源代碼,還是第三方軟件? –

+0

我以Admin(scan.exe)身份運行該進程。該應用程序的工作原理,但它多次呼叫列表中的文件。 我的觀點是隻使用一個進程(scan.exe)並掃描文件列表,而不是每個文件的每個進程。 感謝您的幫助。 – JPL

回答

1

如果您不想被要求提供每個文件,運行您的代碼的程序必須是管理員。你可以讓你的程序會自動提示輸入管理員by adding a manifest filerequestedExecutionLevel標籤設置爲

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
+0

謝謝@Scott。但是,由於應用程序的性質,應用程序必須根據用戶的角色運行。 UAC突然出現,我們沒問題。我的主要問題是如何使用一個scan.exe進程遍歷文件列表,而不是每個進程的一個文件。謝謝 – JPL

+1

@JPL這是一個特定於McAfee'Scan.exe'的問題,而不是C#或Process.Start特有的問題。去閱讀文檔或去問一個更合適的網站,如http:\\ SuperUser.com。如果你真的去那裏問一些C#的問題,就問問如何從命令行來完成。 –

+0

你的觀點很好。現在,只需放下McAfee scan.exe即可。我的例子現在是calculator.exe文件。當我將「scan.exe」替換爲「calc.exe」時,它仍然會創建6個計算過程而不是一個。如何爲所有操作使用ONE calc.exe進程?再次感謝您的幫助,Scott。 – JPL

0

像別人的評論解釋,除非該計劃的目的是接受多個要掃描的文件在一個命令行調用,沒有什麼你可以在你自己的代碼中做這件事。

我會做什麼,我會找到scan.exe的參考手冊,並找出是否可以調用它,傳遞一個文件名,該文件將包含要掃描的文件列表。

由於您沒有提供準確的產品版本,我只能猜測。根據這一link,scan.exe中接受CHECKLIST參數:

/CHECKLIST=<filename> Scan list of files contained in <filename>. 

再說一遍,我不知道這是否適用於您的scan.exe中的特定版本,但你可以找到答案,我敢肯定的那;-)

乾杯

+0

謝謝呂克和斯科特您的時間和指導。我一定會前往他們的網站獲取更多關於如何在每個流程中掃描多個文件的參數。 – JPL