繁体   English   中英

在资源中启动一个进程(可执行文件)

[英]start a Process (executable) in Resources

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

这是我的代码

Process sortProcess = new Process();
byte[] connect = sample.Properties.Resources.connect;
sortProcess.StartInfo.FileName = connect.ToString();

请帮助我。 您可以尝试创建自己的演示项目,在资源中添加一些可执行文件,然后启动该过程。

非常感谢 PS:我试图访问资源中的可执行文件,这是一个嵌入式资源。

您使用目录作为字节阅读器,如果您愿意将资源拖放到 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

您需要确保在构建时复制文件。
在 Visual Studio 中,右键单击解决方案浏览器中的 exe 文件和 go 到属性。
我相信它在“编译操作”下,您可以在其中 select“始终复制”或类似的东西。
抱歉,我面前没有 VS,但它在属性下。

编辑对不起,我很匆忙地回答了这个问题。 我认为您不能也不应该嵌入这样的可执行文件。 您的代码中发生的事情是您正在逐字节读取整个 exe 文件到字符串,这当然不会产生文件名。

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

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

运行进程的基本代码是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM