C# 如何获取已编译资源的路径?
我已经在我的项目中包含了一个可执行文件(即,当您在VS2008的解决方案资源管理器中展开项目时,您会看到它和所有其他类)。这个可执行文件需要由我的程序启动。如何以编程方式检索其路径?下面是一个从文本资源获取文本的示例:C# 如何获取已编译资源的路径?,c#,.net,resources,C#,.net,Resources,我已经在我的项目中包含了一个可执行文件(即,当您在VS2008的解决方案资源管理器中展开项目时,您会看到它和所有其他类)。这个可执行文件需要由我的程序启动。如何以编程方式检索其路径?下面是一个从文本资源获取文本的示例: Assembly assembly = Assembly.GetExecutingAssembly(); Stream stream = assembly.GetManifestResourceStream("ResourceTextFileName"); StreamReade
Assembly assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream("ResourceTextFileName");
StreamReader textStreamReader = new StreamReader( stream );
希望您能够了解如何使用此功能来执行可执行文件。您可以使用
程序集
类-
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之类的随机位置。如果将可执行文件与项目一起部署到同一文件夹中,则可以使用Environment类获取可执行文件的工作目录。这将是:Environment.CurrentDirectory
您可以在解决方案资源管理器中将可执行文件的“复制到输出目录”属性设置为“全部复制”或“更新时复制”来完成此操作。我以前从未对可执行文件执行过此操作。。。但是,如果它是一个嵌入式资源,您可以枚举应用程序中的嵌入式资源列表(或直接按名称引用),当您找到合适的资源时,将其写入磁盘,然后执行它 摘录:
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所指出的,不要忘记将资源标记为“嵌入式资源”。这并不是您所要求的,但在使用其他人发布的建议时可能会很有用: 请注意,如果您的应用程序是Windows窗体应用程序,并且最终安装在C:\Program Files中。。。如果启动应用程序的用户不是以管理员身份运行,则您可能没有对应用程序文件夹的写入权限 如果您想“提取”嵌入资源并将其保存到与应用程序相同的文件夹中的磁盘,则可能会出现问题 我建议:
// for the Windows temp folder
Path.GetTempPath()
// for the user's application data folder
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))
+1.提交了与我即将提交的内容完全相同的内容:((看起来是唯一真正理解问题的解决方案…)