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

C# 有没有办法执行以临时文件名存储的exe?,c#,C#,我正在将作为嵌入式资源存储的本机exe写入由返回的文件。该函数是可取的,因为它允许我忽略避免竞争条件的实现细节。唯一的缺点是它返回扩展名为.tmp的文件名 Process.Start在我的系统上的记事本中打开名为exe的tmp文件。显然,您可以使用p/invoke手动指定类和动词(请参阅)。在我这样做之前,是否有任何方法可以使用.NET framework完成同样的事情?这应该适合您 System.Diagnostics.Process proc = new System.Diagnostics

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


Process.Start
在我的系统上的记事本中打开名为exe的tmp文件。显然,您可以使用p/invoke手动指定类和动词(请参阅)。在我这样做之前,是否有任何方法可以使用.NET framework完成同样的事情?

这应该适合您

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

我认为这是可能的。。在启动流程之前,将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();
这将直接启动进程,文件本身应被视为可执行文件。它对你有用吗?

为什么不与一起使用?
这样,您仍然有一个唯一的临时文件和路径名,并且可以附加“.exe”,从而消除了当前执行扩展名为“.tmp”的文件时遇到的问题


作为副业,我希望您记住在使用临时文件后删除它们,特别是在使用时,因为当您达到65535个临时文件时,可能会导致问题。当实际在生产代码上发生这种情况时,这是非常可能的,并且令人沮丧的调试。

将.tmp重命名为.exe,然后再将其传递给
Process.Start()
;没有命名冲突,因为没有扩展名的文件名已被随机化。或者只在.tmp.exe的末尾使用cat.exe。理论上,另一个进程可能以这种方式登录到相同的名称,因为exe文件不是作为GetTempFileName进程的一部分创建的。另外,我必须删除创建的
tmp
文件。不管怎样,我还是很好奇是否要强制使用这个类/动词。我的答案出了什么问题?在@MarcWittmann得到0分之前,我写了与他相同的答案。非常curious@faby没有错,因此没有否决票。我同时看到了两个。我倾向于使用大写、标点符号和解释。我没有意识到默认情况下UseShellExecute是正确的。谢谢你回答这个问题!奇怪的是,我在你面前写了同样的答案,但你得到了2分加上被接受的答案是的,几乎完全相同的答案。如果这有助于我在您键入时开始键入,则只需多花几秒钟的时间,抱歉:)它会引发错误:{“指定的可执行文件不是此操作系统平台的有效应用程序。”}