2015-10-20 52 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