使用没有绝对路径的Process调用exe

时间:2014-04-10 14:21:00

标签: c#

我编写了一个需要使用

调用外部exe的程序
Process proc = Process.Start(filepath).

我指定了exe的绝对路径,它工作正常。但是,我需要在不同的计算机上使用此程序。每次exe都有不同的绝对路径,我需要更改这部分的代码。我想知道有没有办法让我不需要更改代码?提前谢谢!

3 个答案:

答案 0 :(得分:2)

你问的是错误的问题。是不是如何修改API以满足您的固定需求(“启动过程无需了解路径”,暂时忽略了什么是巨大的安全问题)。您应该问的问题是如何修改我的代码以匹配我使用的API?

如果在给出完整路径的情况下启动进程会更好(如果可执行文件名在%PATH%中,但这是一个不同的主题,它也可以工作),让app找出正确的路径,然后启动进程。有无数种方法可以实现这一目标。可能最安全的选择是使用指向路径的App.Setting。在部署时,应用程序已正确配置所需程序的位置。还有(很多)方法可以做到这一点,这将取决于你实际想要解决的问题,需要更多细节。

答案 1 :(得分:1)

如果两个exe文件都在同一个文件夹中,那么

的WinForms:

var filepath = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), otherexename);
Process.Start(filepath);

WPF:

var filepath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, otherexename)
Process.Start(filepath);

答案 2 :(得分:0)

在Windows服务中,您可以执行以下操作来获取当前正在运行的程序集的目录,然后生成指向您的exe的正确路径:

var directory = Path.GetDirectoryName(
                  new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
var exeLocation = Path.Combine(directory,"myExe.exe");