C# 使用无绝对路径的进程调用exe

C# 使用无绝对路径的进程调用exe,c#,C#,我写了一个程序,需要使用 Process proc = Process.Start(filepath). 我指定了exe的绝对路径,它可以正常工作。但是,我需要在不同的计算机上使用这个程序。每次exe都有不同的绝对路径,我需要更改此部分的代码。我想知道是否有一种方法我不需要更改代码?提前谢谢 你问错了问题。不是如何修改API以满足您的固定需求(“启动流程,不知道路径”,暂时忽略了这是一个多么巨大的安全问题)。您应该问的问题是如何修改代码以匹配我使用的API 由于如果给定完整路径,则启动进程的效

我写了一个程序,需要使用

Process proc = Process.Start(filepath).

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

你问错了问题。不是如何修改API以满足您的固定需求(“启动流程,不知道路径”,暂时忽略了这是一个多么巨大的安全问题)。您应该问的问题是如何修改代码以匹配我使用的API


由于如果给定完整路径,则启动进程的效果更好(如果可执行文件名在%path%中也可以,但这是一个不同的主题),因此您是否已找到正确的路径,然后启动该进程。实现这一点的方法不计其数。可能最安全的选择是使用指向路径的App.Setting。部署时,应用程序正确配置了所需程序的位置。有(许多)更多的方法可以做到这一点,这将取决于您实际试图解决的问题,需要更多的细节。

如果两个exe文件位于同一文件夹中,则

winforms:

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


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

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

您必须为应用程序定义路径,或者您可以在客户端计算机中搜索exe,获取其路径,然后使用该路径(这肯定会花费更多时间)我确信您可以在不更改源代码的情况下更改文件路径。如果exe确实位于%PATH%中指定的文件夹中,您可以按文件名(无路径)执行该文件。请您详细解释一下“如果exe确实位于%PATH%中指定的文件夹中,您可以按文件名(无路径)执行该文件”,好吗?”??感谢您知道exe与应用程序的相对路径吗?是否有任何环境变量提供线索?关于“使用指向路径的应用程序设置”,您的意思是我可以在Visual Studio中配置exe的路径(我使用Visual Studio)?实际上,我将exe添加为项目中的引用,并仅按其名称调用exe,但它不起作用。不,我的意思是添加一个。请看我的项目是Windows服务,我可以使用第一个吗?您可以自己检查它(使用msdn或尝试)。我对服务一无所知。
var directory = Path.GetDirectoryName(
                  new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath);
var exeLocation = Path.Combine(directory,"myExe.exe");