【问题标题】:Starting a executable from multiple threads through Process.Start()通过 Process.Start() 从多个线程启动可执行文件
【发布时间】:2011-05-09 12:06:12
【问题描述】:

我正在使用“7z.exe”在我的应用程序(c#)中做一些额外的工作。我在我的应用程序的主可执行文件中嵌入了“7z.exe”作为资源文件。在执行我的应用程序期间,我在硬盘上提取“7z.exe”并通过 Process.Start() 执行它。

我需要从多个线程多次执行“7z.exe”。 从多个线程访问相同的“7z.exe”文件是否安全?或者我应该为每个进程提取单独的“7z.exe”(到硬盘上的不同位置)。Start()

PS:7z.exe 属于 Seven-zip 软件,用 c/c++ 编写。

【问题讨论】:

  • 除了 Jon 在下面的回答之外,将可执行文件作为资源嵌入到您的应用程序中,然后稍后提取它们几乎不是正确的方法。特别是,它可能会驱动病毒扫描程序。使用专为 C# 设计的 ZIP 库(如 SharpZipLib)是一个非常更好的选择。

标签: c# .net multithreading executable process.start


【解决方案1】:

是的,您应该能够从同一个可执行文件启动多个进程 - 假设该进程本身不做任何事情来阻止这种情况(这是可行的 - 您必须检查 7-zip)。你绝对不能使用SharpZipLib 之类的压缩库来做你想做的事吗?

【讨论】:

  • 在 SharpZipLib 中,我仍然需要包含“7z.dll”。所以使用 SharpZipLib 有什么好处。我仍然必须提取 7z.dll。
  • @BitsnBytes:SharpZipLib 使用 7z.dll 吗?我没有意识到这一点。但优点是在单个进程中管理代码比启动多个进程更容易。
  • 考虑到 7z.exe 允许从多个线程同时调用。我可以假设 7z.exe 永远不会被锁定并允许从其他线程执行。
  • @BitsnBytes:你不会启动多个线程 - 你会启动多个进程。这更难管理,IMO。是的,它可能会执行得很好 - 但清理等会更难处理。
【解决方案2】:

是的,从不同的进程/线程执行相同的 exe 文件是安全的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多