【问题标题】:Using an included command line exe in a C# program: what's the path?在 C# 程序中使用包含的命令行 exe:路径是什么?
【发布时间】:2014-04-14 05:20:54
【问题描述】:

我搜索并只找到了答案的片段。 我正在构建用于在整个工作室分发的工具。 我有一个 .exe 命令行程序(一种转换资产格式的工具)作为资源包含在我的 VS 项目中。

基于另一个线程,我将包含的 .exe 的“复制到输出目录”属性设置为“如果较新则复制”;以便其他人安装时包含它。

现在我想通过传递一个内置命令行的字符串来调用这个可执行文件,带有参数,例如

“C:\path\to\myProgram.exe -inputFilename -outputFilename -options”

问题:C:\path\to\myProgram.exe 真正需要什么? 我的命令行可执行文件最终会安装在最终用户的机器上吗?

或者将其作为资源嵌入是否开辟了一种新的调用方式(使用 args)?

【问题讨论】:

  • 一般来说,它与最终用户机器上的位置有关,但我不知道何时涉及嵌入式资源+1
  • 看看stackoverflow.com/q/798655/299327。但是,作为一般规则,我不会将程序称为资源。你为什么要这样做?
  • 如果您设置较新的副本,那么它不是嵌入式资源。它被复制到程序集所在的任何地方。如果你想知道程序集在哪里试试这个stackoverflow.com/questions/52797/…
  • stackoverflow.com/questions/1658518/…,取决于你在做什么。请注意,您只是在复制您的 exe,而安装程序正在安装它。它不是嵌入式资源,而是完全不同的球类游戏
  • [编辑好吧,它不是真的嵌入] 我希望 C:\path\to\myProgram.exe 保证出现在一个已知位置,所以我可以可靠地调用它。如果有更好的方法,我等待开悟。

标签: c# command-line-arguments visual-c#-express-2010


【解决方案1】:

复制到输出文件夹可确保“资源”与您的可执行文件具有相对位置。使用复制到输出文件夹的方法,可以使用以下代码获取主可执行文件的位置:

String baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

什么时候可以使用

Path.Combine(baseDir, "myProgram.exe")

获取最终路径。如果它位于“工具”文件夹中,则必须将其包含在第二个参数中(该参数是您的单独程序的相对路径)。命令行参数进入 ProcessStartInfo 对象。

【讨论】:

  • 最后一位不应该用引号引起来吗? Path.Combine(baseDir, "myProgram.exe")
  • 这似乎生成了我想要的字符串。感谢大家的帮助。
猜你喜欢
  • 2019-12-20
  • 1970-01-01
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多