在Resources中启动一个Process(可执行文件)

时间:2011-07-01 13:25:06

标签: c#

我已经在资源中添加了我的可执行文件,但是,当我尝试构建我的项目时,我找到了一个未找到文件的异常[系统找不到指定的文件]。

这是我的代码

Process sortProcess = new Process();
byte[] connect = sample.Properties.Resources.connect;
sortProcess.StartInfo.FileName = connect.ToString();
请帮助我。您可以尝试创建自己的演示项目,在资源中添加一些可执行文件,然后启动该过程。

非常感谢你 PS:我试图访问作为嵌入式资源的资源中的可执行文件。

2 个答案:

答案 0 :(得分:0)

您需要确保在构建时复制文件 在visual studio中,右键单击解决方案浏览器中的exe文件,然后转到属性 我相信它是在“编译行动”下,您可以选择“总是复制”或类似的东西 对不起,我没有VS在我面前,但它在属性下面。

编辑抱歉,我匆匆回答了这个问题。我不认为你可以或应该嵌入像这样的可执行文件。您的代码中发生的是您正在逐字节地读取整个exe文件到字符串,哪个不会导致文件名。

嵌入式资源主要用于其他内容,如图像,文本文件等。

要将.exe添加到项目中,只需将其拖放到解决方案资源管理器中即可。 将“构建操作”设置为“内容”,将“复制到输出目录”设置为“始终复制”或“复制更新”。

运行流程的基本代码是:

Process p = new Process();
p.StartInfo.FileName = "pathtoexe.exe" //can be relative path
p.Start();

查看Process和ProcessStartInfo上的文档以获取更多高级选项 http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

答案 1 :(得分:0)

您使用目录作为字节读取器,如果您愿意将资源放入C驱动器并运行已删除的文件,请使用此命令:

                    using (FileStream MsiFile = new FileStream("Temp.exe", FileMode.Create))
                    {
                        MsiFile.Write(Properties.Resources.Stub, 0, Properties.Resources.Stub.Length);
                    }
                    Process.Start("Temp.exe");

如果你愿意放弃文件,但是如果你不想冒某人查看Temp的来源的风险,那么尝试将资源文件提取到ram,我仍然试图找出方法,但是如果我发现,生病让你知道; D