有没有办法执行以临时文件名存储的exe?

时间:2014-11-26 14:04:35

标签: c#

我将作为嵌入资源存储的本机exe写入Path.GetTempFileName返回的文件。该函数是可取的,因为它让我忽略了避免竞争条件的实现细节。唯一的缺点是它返回一个扩展名为.tmp的文件名。

Process.Start在我的系统上的记事本中打开tmp-named-exe文件。显然,您可以使用p / invoke手动指定类和动词(请参阅https://stackoverflow.com/a/12681219/521757)。在我这样做之前,有没有办法使用.NET框架完成同样的事情?

3 个答案:

答案 0 :(得分:4)

我认为可以在启动流程之前将Process.StartInfo.UseShellExecute属性设置为False,例如:

 System.Diagnostics.Process p = new System.Diagnostics.Process();
 p.StartInfo.FileName = @"c:\tmp\a123.tmp";
 p.StartInfo.UseShellExecute  = false;
 p.Start();

这将直接启动该过程,并且该文件应被视为可执行的。它对你有用吗?

答案 1 :(得分:2)

为什么不将Path.GetRandomFileName()Path.GetTempPath()结合使用? 这样,您仍然拥有唯一的临时文件和路径名,并且可以附加“.exe”,从而消除了执行带有“.tmp”扩展名的文件时遇到的当前问题。

作为副业,我希望您记得在使用它们后删除临时文件,尤其是在使用Path.GetTempFileName()时,因为当您达到65535个临时文件时可能会导致问题。当生产代码实际发生时,这是非常可能和令人沮丧的调试。

答案 2 :(得分:1)

这应该对你有用

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.StartInfo.FileName = //your filename .tmp
proc.StartInfo.UseShellExecute  = false;
proc.Start();