【问题标题】:Run exe file while it is still open in C#在 C# 中仍然打开时运行 exe 文件
【发布时间】:2015-06-05 23:24:36
【问题描述】:

目前我执行以下操作:

  1. 在资源文件中包含一个 EXE 文件。
  2. 在运行时,我提取 EXE 文件并将其写入 HDD 上的文件,使用“DeleteOnClose”选项。
  3. 显然 II 不会关闭文件,因此它仍保留在磁盘上。
  4. 我去路径并双击它,但它拒绝打开。
  5. 如果我使用“Process.Start”,我会收到文件不存在错误,尽管它在给定的路径中。
  6. 我将 FileShare 和 FileAccess 设置为 ReadWrite。
  7. Process.Start 再次不起作用。

这是我使用的代码:

byte[] exeFile =ExeSecure.Properties.Resources.ReqCheck;
//2) Create file to be deleted on close
FileStream aFile = new FileStream(@"c:\reco.exe", FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite, 20000, FileOptions.DeleteOnClose);
//3) Write Exe file content to HDD
aFile.Write(exeFile, 0, exeFile.Length);
aFile.Flush();
Thread.Sleep(100); //Wait a while for file to be flushed
while (!File.Exists(@"c:\reco.exe")); //Make sure file is there on HDD
    Process.Start("C:\reco.exe");//Start file , this always fails.

【问题讨论】:

  • 不相关,但我会在你的 while 循环中添加一些延迟

标签: c# file process shared


【解决方案1】:

也许这只是您问题中的一个错字,但Process.Start 中的路径不正确。您缺少@ 符号:

Process.Start(@"C:\reco.exe");

【讨论】:

  • 我第一次听说FileOptions.DeleteOnClose。我没有看到它的任何用法......(我错了吗?)?它基本上意味着该文件必须调用 .flush 才能使其成为一个完整的文件,然后在不关闭它的情况下使用它。这不是很奇怪吗?
  • 关键是只要文件是从 C# 代码打开的,你永远不能在 windows 中双击它并让它运行,你也不能使用 Process.Start() 执行它,如果您从资源中启动某些 exe 并希望在使用完它们后将其删除,则关闭时删除文件的选项非常有用,因此您可以使用此选项指示 Windows 执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多