我已经在我的c#程序中实现了一个方法来运行批处理文件,该文件对上传的任何文件运行病毒扫描;
public static Int32 ExecuteCommand(String filePath, Int32 Timeout){
Int32 ExitCode;
ProcessStartInfo ProcessInfo = new ProcessStartInfo();
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = true;
ProcessInfo.FileName = filePath;
Process proc = Process.Start(ProcessInfo);
proc.WaitForExit(Timeout);
ExitCode = proc.ExitCode;
proc.Close();
return ExitCode;
}
好了我的批处理文件;
@ECHO OFF
c:
cd "..\AVG\AVG9\"
avgscana.exe /SCAN="..\learninglounge.com.solar.quarantine\" /REPORT="..\learninglounge.com.solar.antivirus\virusReports\report.txt"
编辑:我确实拥有完全限定链接到avg exe和目录,但已替换为..以便发布到stackoverflow。对不起,如果这引起了混乱。
所以我的问题是我的批处理文件的报告方面。我可以双击批处理文件,它扫描并创建报告没问题。当我通过我的c#运行它时,我得到退出代码2;命令无法识别。如果我删除我的批处理文件的报告部分,这很好。现在很明显这指的是写权限但我已经检查过并且模拟用户对目录有写访问权限。我有什么遗失吗?
全部谢谢
答案 0 :(得分:1)
错误指出avgscana.exe
不在执行命令时设置为“当前”的目录中。在Windows资源管理器中单击bat文件时,当前目录将设置为bat文件所在的目录。可能您的avgscana.exe
位于同一个文件夹中,因此工作正常。
当您从.Net应用程序执行命令时,当前目录保持不变(如果您没有更改它,那么它将是.Net app所在的文件夹)。如果您的.Net应用程序与bat文件不在同一个文件夹中,那么您将收到一个错误,实际上您正在获取该错误。您应该在bat文件中指定完整路径,或者在启动bat之前在.Net app中设置Environment.CurrentDirectory
。
答案 1 :(得分:0)
您是否已检查所有环境变量的设置与从cmd行运行批处理文件完全相同。我很确定可能会有一些差异。它也是什么样的操作系统。如果这需要提升(vista windows 7)您可能实际上需要在代码中模拟适当的用户。 路加
答案 2 :(得分:0)
好吧我已经完成了一项工作,我宁愿将报告保存在那里,但我只是从流程中捕获标准输出,然后保存到文件+任何处理。
很奇怪。
答案 3 :(得分:0)
在批处理文件中,您有:
c:
cd "..\AVG\AVG9\"
avgscana.exe
/SCAN="..\learninglounge.com.solar.quarantine\"
/REPORT="..\learninglounge.com.solar.antivirus\virusReports\report.txt"
执行命令时,驱动器C:上的“当前”目录不明确。您只需向上移动目录树。与avgscana.exe命令相同,您可以进行相对引用而不是绝对引用。
您确定CD命令已将您带到正确的目录吗?将CD命令更改为绝对引用(cd“c:\ wherever \ avg \ avg9 \”),这样就可以确保找到avgscana命令的相对引用。
您的CD命令可能无提示失败,但您的avgscana.exe可能在您的路径中,因此它会被执行,但由于未找到相对/扫描和/报告位置,因此它失败并显示代码2。
祝你好运!