依赖于位置运行.exe文件

时间:2018-07-12 20:56:54

标签: c++ visual-studio command-line

我有一个Visual Studio项目(项目1),该项目生成可执行文件(a.exe)。我有一个项目(项目2),它使用不同的命令行参数多次运行项目(项目1)中的可执行文件。在命令行上,我可以运行:

C:\filepath\Solution\Project1> a.exe                 //command 1

但是我无法运行:

C:\filepath\Solution\Project2> C:\filepath\Solution\Project1\a.exe    //command 2

因为.exe文件取决于周围的文件层次结构。

在Project 2中,我可以运行系统调用以执行命令2,但是遇到层次结构/位置依赖性问题。解决方案结构如下:

Solution
--> Project 1
    --> a.exe
--> Project 2
    --> main.cpp    // this will run system call to command 2

有什么办法可以解决这个问题而无需更改a.exe文件?

1 个答案:

答案 0 :(得分:0)

在Project2中,您如何执行Project1的.exe?如果将当前工作目录(CWD)设置为Project1的.exe所在的文件夹,则它应能按预期工作:

var p = new ProcessStartInfo(@"C:\Project1\bin\project1.exe");
p.WorkingDirectory = @"C:\Project1\bin";
Process.Start(p);

如果由于某种原因该方法不起作用,则可以简单地将整个Project1的二进制输出和关联的文件结构复制到Project2的输出文件夹中。有两种方法可以做到这一点:

选项1(首选):将Project1的二进制输出添加到Project2。为此,请在解决方案资源管理器中的Project2节点上单击鼠标右键,然后选择“添加” |“添加”。现有项目...在“添加现有项目”对话框中,将文件类型更改为“所有文件”。导航到Project1的bin文件夹,选择Project1 .exe和所有依赖项,单击“添加”按钮右侧的“向下箭头”,然后选择“添加为链接”。在解决方案资源管理器中,选择Project2中新添加的文件链接,然后在“属性”中将“复制到输出目录”更改为“如果更新则复制”。对于Project1的bin文件夹中的每个子文件夹,必须使用解决方案资源管理器在Project1中创建一个新的对应文件夹,然后对该子文件夹中的所有文件重复此过程。

选项2:创建一个构建后步骤,以将Project1的二进制文件和周围的文件夹层次结构复制到Project2的bin文件夹中。为此,请在解决方案资源管理器中的Project2节点上单击鼠标右键,然后选择“属性”。转到“构建事件”,然后输入诸如以下内容的构建后命令行:

xcopy "C:\Project1\bin\" "$(TargetDir)" /S

首选选项1,因为对于选项2,外部工具不太可能实现项目2对Project1的依赖。在这两种情况下,都必须更新Project2才能直接从Project2的输出文件夹中运行Project1 .exe。

祝你好运!