【问题标题】:C# How to get the PATH of the embedded .exe fileC#如何获取嵌入式.exe文件的PATH
【发布时间】:2014-10-20 23:38:20
【问题描述】:

我有一个 exe 文件,我通过 windows 命令提示符运行并提供命令行参数。我浏览了this post 并运行了以下命令:

System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();

但它所做的只是给我位于 WindowsFormsApplication1\obj\Debug 文件夹中的资源文件

我查看了 this post ,但它告诉了如何直接执行 exe 而无需从 cmd 运行它。

我什至尝试了以下命令:

string path = Path.Combine(Path.GetTempPath(), "MyApplication.exe");

它有效,但在清除我的 C:\Users\UserName\AppData\Local\Temp 文件夹后,应用程序开始出现错误。

我什至尝试了以下命令:

global::ApplicationName.Properties.Resources.MyApplication

但它给出的是 byte[] 而不是应用程序的路径。

我只想知道如何运行嵌入到我的资源中的应用程序,以便我可以成功执行以下命令:

var proc = new Process
                    {
                        StartInfo = new ProcessStartInfo
                        {
                            FileName = "cmd.exe",
                            Arguments = "/K " + MyApplication+" Argument "+Path1+" "+Path2 ,
                            UseShellExecute = false,
                            RedirectStandardOutput = true,
                            CreateNoWindow = true
                        }
                    };
                    proc.Start();

                    while (!proc.StandardOutput.EndOfStream)
                    {

                        string line = proc.StandardOutput.ReadToEnd();
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(resultFile))
                        {
                            file.WriteLine(line);
                        }
                    }

【问题讨论】:

  • 您的项目中有嵌入文件作为资源?如果是这样,您必须在运行它之前将其解压缩到 filsystem 中的目录。
  • 是的,我已将应用程序文件添加为资源。我如何提取它并运行它呢?我可以在运行后将其删除,以便应用程序不会创建任何临时垃圾文件吗?

标签: c# visual-studio


【解决方案1】:

将资源提取到文件系统中的一个文件中,然后运行它。

byte[] fileContents = ApplicationName.Properties.Resources.MyApplication;
File.WriteAllBytes("MyApplication.exe", fileContents);

现在您可以使用 MyApplicaton.exe 作为路径运行该文件。

【讨论】:

  • 我尝试了以下命令: byte[] fileContents =global::ApplicationName.Properties.Resources.MyApplication; File.WriteAllBytes("MyApplication.exe", fileContents); MessageBox.Show(MyApplication.exe);但它给了我错误
  • 你为什么要做messagebox cloc.exe?我编写的代码片段在当前目录中创建了一个文件,因此您可以使用 process.start 运行它
  • 我不想按原样运行应用程序。我想通过命令行运行它,所以我可以给它参数。我做了 MessageBox.Show 看看它是否给了我路径
  • 好的,所以使用您选择的完整路径来提取可执行文件,然后将相同的路径传递给 cmd
  • 我是 C# 的初学者,请您解释一下如何做到这一点
猜你喜欢
  • 2017-09-04
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多