从我的C#程序的同一文件夹启动.exe

从我的C#程序的同一文件夹启动.exe,c#,wpf,C#,Wpf,我用c#编写了一个小程序,带有一个按钮,可以打开另一个.exe文件 如果我使用: private void start_Click(object sender, RoutedEventArgs e) { System.Diagnostics.Process.Start(@"path to file"); } 但如果我想让它从同一个文件夹运行.exe,我基本上不想这样: private void start_Click(object sen

我用c#编写了一个小程序,带有一个按钮,可以打开另一个.exe文件

如果我使用:

private void start_Click(object sender, RoutedEventArgs e)
        {
            System.Diagnostics.Process.Start(@"path to file");
        }
但如果我想让它从同一个文件夹运行.exe,我基本上不想这样:

private void start_Click(object sender, RoutedEventArgs e)
        {
            System.Diagnostics.Process.Start(@"program.exe");
        }
我错过了什么,我已经尝试了这个网站的解决方案:

var startIngo = new ProcessStartInfo();
startIngo.WorkingDirectory = // working directory
// set additional properties 

Process proc = Process.Start(startIngo);

但是Visual c根本不识别“ProcessStartInfo”…

您需要的是:

Application.StartupPath
它将返回启动可执行文件的启动路径

如果您正在使用WPF,请尝试以下方法:

String appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);
你可以做:

var startupPath = System.IO.Path.GetDirectoryName(
                       System.Reflection.Assembly.GetEntryAssembly().Location);
var programPath = System.IO.Path.Combine(startupPath, "program.exe");

System.Diagnostics.Process.Start(programPath);

ProcessStartInfo
位于
System.Diagnostics
命名空间中-您需要使用
using System.Diagnostics导入cs文件顶部的命名空间
语句,用于编译器识别
ProcessStartInfo
,而无需明确指定使用该类的命名空间。

您也可以尝试
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutionGasEmbly().GetName().CodeBase)

获取您的本地路径。比如说

//in your imports/using section
using System.IO
using System.Reflection
using System.Diagnostics;

//in your code to execute
Process.start(Path.GetDirectoryName(Aseembly.GetExecutingAssembly().GetName().CodeBase) + "\\program.exe")
有两种情况:

  • 应用程序是直接启动的-可以从命令行提取启动路径

  • 应用程序是间接启动的-例如,从单元测试中,无法从命令行提取启动路径,但是您可以在启动期间(在用户有机会更改它之前(例如,使用文件打开/保存对话框))将其从当前目录读入静态变量


  • 你说C#不识别
    ProcessStartInfo
    是什么意思?当然可以。顺便说一句,为了让C#识别ProcessStartInfo,您需要导入System.Diagnostics命名空间。当我将其添加到按钮事件时,StartupPath出现错误。@Joao:我编辑了答案以包含完全限定名。这是否纠正了错误?在我的事件中粘贴代码后,我发现错误:名称空间“System.Windows”中不存在类型或名称空间名称“Forms”(是否缺少程序集引用?@Joao:我没有注意到您正在使用WPF-我已将我的答案更新为WPF兼容版本。这应该能满足您的需要;)你能给我举个例子吗?我对这一点非常陌生,我不太理解微软网站的解释。他使用的是WPF,而不是Windows窗体-不幸的是,这不起作用(这也是我最初的想法)。@Reed:刚刚更新了我的答案,加入了WPF解决方案。好的,我在页面顶部添加了“使用系统.诊断”,但是,我的代码如何让它工作呢?startIngo.WorkingDirectory=//工作目录我应该在=后面插入exe名称吗?@Joao应该解决“但是Visual c#根本不识别”ProcessStartInfo..”的问题。我将这3个放在导入中,并在事件中插入其余的代码,我收到以下错误:错误1'System.Diagnostics.Process'不包含'start'的定义错误2'Path'是'System.Windows.Shapes.Path'和'System.IO.Path'Error 3'System.Windows.Shapes.Path'之间的不明确引用。错误4'GetDirectoryName'的定义当前目录中不存在名称'Aseembly'上下文