在位置上运行具有依赖项的.exe文件

Run .exe File with Dependencies on Location

本文关键字:exe 文件 依赖 位置 运行      更新时间:2023-10-16

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

C:filepathSolutionProject1> a.exe                 //command 1

但我不能运行:

C:filepathSolutionProject2> C:filepathSolutionProject1a.exe    //command 2

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

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

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

有什么办法可以在不更改.exe文件的情况下绕过这个问题吗?

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

var p = new ProcessStartInfo(@"C:Project1binproject1.exe");
p.WorkingDirectory = @"C:Project1bin";
Process.Start(p);

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

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

选项2:创建一个构建后步骤,将Project1的二进制文件和周围的文件夹继承复制到Project2的bin文件夹。要执行此操作,请右键单击解决方案资源管理器中的Project2节点,然后选择"属性"。转到构建事件,然后输入构建后命令行,如以下所示:

xcopy "C:Project1bin" "$(TargetDir)" /S

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

祝你好运!