所以,我在我正在使用的程序中使用Execute Shell,我需要通过命令压缩一些文件,我决定使用Nuzet附带的7zip。我还为最终用户添加了一条消息,说明该过程已完成,我在该过程实际完成前30秒收到该消息,因此在消息传递30秒后我必须能够打开/访问该zip文件。 / p>
有没有办法跟踪它或显示消息,直到完成该过程?尝试使用线程,if语句,whiles,do while,以及更多但仍然没有运气,这是一些代码如何寻找压缩部分
public static void ZipFiles()
{
ExecuteShell ES = new ExecuteShell();
ES.ExecuteCommand("cmd.exe", zipCmdText, false, false,
"C:\\Windows\\System32", "");
}
and the execute shell part:
public bool ExecuteCommand(string EXEName, string Command, bool
blnCallWaitForExit, bool blnBatchFile, string strWorkingDirectory, string
ExecutionDoneMessage)
{
bool blnCommandExited = false;
try
{
KillAllCommandExe(EXEName);
List<string> OutPut = new List<string>();
objProcess = new Process();
objProcess.OutputDataReceived += new DataReceivedEventHandler(objProcess_OutputDataReceived);
objProcess.ErrorDataReceived += new DataReceivedEventHandler(objProcess_ErrorDataReceived);
objProcess.Exited += new EventHandler(objProcess_Exited);
objProcess.StartInfo.FileName = EXEName;
if(!blnBatchFile)
objProcess.StartInfo.Arguments = Command;
objProcess.StartInfo.UseShellExecute = false;
if (strWorkingDirectory != "")
objProcess.StartInfo.WorkingDirectory = strWorkingDirectory;
objProcess.StartInfo.RedirectStandardInput = true;
objProcess.StartInfo.RedirectStandardOutput = true;
objProcess.StartInfo.RedirectStandardError = true;
objProcess.StartInfo.CreateNoWindow = true;
objProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
objProcess.Start();
objProcess.BeginOutputReadLine();
objProcess.BeginErrorReadLine();
if (blnCallWaitForExit == true)
{
objProcess.WaitForExit(9000);
}
if (objProcess.HasExited)
{
CloseProcess();
}
blnCommandExited = true;
}
catch (Exception ex)
{
}
return blnCommandExited;
}
还有其他更好/更快的压缩选项可以达到这个效果吗?
任何建议都将不胜感激。
答案 0 :(得分:1)
7zip很好但是你注意到它需要一些管道才能使用它,因为它是一个外部工具。相反,您可以使用System.IO.Compression.ZipFile
或System.IO.Compression命名空间中的其他内容。这将为您提供更好的UI集成。它自.NET Framework 4.5以来可用