我在项目中包含了一个可执行文件(即当您在VS2008的解决方案资源管理器中展开项目时,您会看到它与所有其他类一起)。这个可执行文件需要由我的程序启动。如何以编程方式检索其路径?
答案 0 :(得分:3)
我之前从未使用过可执行文件...但是,如果它是一个嵌入式资源,您可以通过应用程序中的嵌入资源列表进行枚举(或直接通过名称引用它),当您找到一个时适当的,将其写入磁盘,然后执行它。
提取:
Assembly assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream("resource name")
{
using FileStream fs= new FileStream("executable name")
{
byte[] buffer = new byte[32*1024];
int bytesRead;
while ((bytesRead= stream.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, bytesRead);
}
}
}
执行:
using System.Diagnostics;
Process someProc;
someProc= Process.Start("executable name");
正如Daniel L所指出的那样,不要忘记将资源标记为“嵌入式资源”。
答案 1 :(得分:0)
以下是从文本资源中获取文本的示例:
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("ResourceTextFileName");
StreamReader textStreamReader = new StreamReader( stream );
希望你能收集到如何使用它来执行可执行文件。
答案 2 :(得分:0)
如果将可执行文件与项目一起部署到同一文件夹,则可以使用Environment类获取可执行文件的工作目录。那将是:Environment.CurrentDirectory。
您可以将解决方案资源管理器中可执行文件的“复制到输出目录”属性设置为“全部复制”或“如果更新则复制”以实现此目的。
答案 3 :(得分:0)
这不完全是您的要求,但在使用其他人发布的建议时可能会有用:
请注意,如果您的应用程序是Windows窗体应用程序,并且它最终安装在C:\ Program Files ...中,如果启动应用程序的用户未运行,则您可能没有对应用程序文件夹的写入权限管理员。
如果您要“提取”嵌入资源并将其保存到与您的应用相同的文件夹中的磁盘,那么这可能会出现问题。
我会建议:
未将.exe嵌入为资源。只需将其Copy to Output Directory设置为Always。然后将其与主.exe
将其作为资源嵌入,但将其保存到磁盘时,请使用Windows临时文件夹(如果只是一次性的话)或用户的数据文件夹(C:\ Documents and Settings \ [user] \申请数据)
您可以获取当前操作系统的正确文件夹:
// for the Windows temp folder
Path.GetTempPath()
// for the user's application data folder
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
答案 4 :(得分:-1)
您可以使用Assembly
类 -
Assembly.GetExecutingAssembly().Location
应该指向您正在运行的应用。使用该路径,剥离.EXE并添加可执行文件的文件名。
string filename = Assembly.GetExecutingAssembly().Location;
filename = filename.Substring(0, filename.LastIndexOf("\\") + 1);
filename += "my_exe_name.exe";
Process.Start(filename);
请注意,这不适用于webapps,因为Location属性可能指向GAC等随机位置。