Process.Start 事件需要能够传递 ProcessStartInfo.WorkingDirectory 作为参数

Process.Start event needs to be able to pass ProcessStartInfo.WorkingDirectory as a parameter

我有代码可以使用

启动应用程序
Process.Start(System.Configuration.ConfigurationManager.AppSettings("ApplicationsNameWithPath"))

目前的问题是,似乎需要 WorkingDirectory 路径。由于该值当前仅指向应用程序名称,是否可以将 exe 名称和路径传递给配置文件,以便在执行上述代码行时设置 workingDirectory。

因此解决方案应该是下面的键值

<add key ="ApplicationsNameWithPath" value ="C:\Temp\Test.exe"/>

它是生产环境中更大的应用程序框架的一部分,无论如何只要修改配置文件中的 'Value' 字段来实现解决方案,我们将不胜感激。

当您使用 VB.NET 时,似乎没有其他方法可以创建 ProcessStartInfo class 的实例并像这样修改 WorkingDirectory

Dim processStartInfo As New ProcessStartInfo()

processStartInfo.Filename = System.Configuration.ConfigurationManager.AppSettings("ApplicationsNameWithPath")
processStartInfo.WorkingDirectory = Path.GetFullPath(processStartInfo.Filename)
Process.Start(processStartInfo)

在 C# 中,直接传递带有 属性 的匿名实例的更简单方法如下:

Process.Start(new ProcessStartInfo( ... ) { WorkingDirectory = ... });

更新:(感谢 Maertin)

似乎也可以在 VB(2008 年之后)中执行此操作:

Process.Start(New ProcessStartInfo( ... ) With {.WorkingDirectory = IO.Path.GetDirectoryName( ... )})

如果您无法修改您的代码,那么一种解决方案是创建一个设置当前目录然后执行可执行文件的批处理文件,然后从您的配置文件指向该批处理文件。这是一个例子:

在配置文件中:

<add key ="ApplicationsNameWithPath" value ="C:\Temp\Test.bat"/>

然后创建"C:\Temp\Test.bat",内容如下:

c:
cd \Test\
Test.exe

不要忘记在批处理文件的末尾有一个空行,以便执行 "Test.exe"。

如果由于某种原因,您不能使用批处理文件,那么您可以创建一个新的可执行文件来在正确的目录中执行您的原始可执行文件,然后从配置文件指向这个新的可执行文件。