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

时间:2010-07-08 16:24:55

标签: 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 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”......

5 个答案:

答案 0 :(得分:11)

你在寻找的是:

Application.StartupPath

它将返回启动可执行文件的启动路径。

如果您使用的是WPF,请尝试以下方法:

String appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

答案 1 :(得分:2)

你可以这样做:

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);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您也可以尝试System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().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")

答案 4 :(得分:0)

有两种情况:

  1. 直接启动应用程序 - 可以从命令行中提取启动路径。

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