0

我有一个在 AppStream 2.0 中运行的 UI 应用程序。我有一个命令按钮,当按下它时,会对命令行 EXE 进行外部调用。

我正在使用 ProcessStartInfo 对象来传递参数。

            var startInfo = new ProcessStartInfo
            {
                FileName = @"My.exe",
                Arguments = '"' + jobNameToExecute + '"',
                WindowStyle = ProcessWindowStyle.Normal
            };

然后我实例化一个 Process,提供上面创建的 ProcessStartInfo。

            var ExternalProcess = new Process {StartInfo = startInfo};
            ExternalProcess.Start();
            ExternalProcess.WaitForExit();

该过程出错:

System.ComponentModel.Win32Exception (0x80004005):系统在 System.Diagnostics.Process.Start() 处找不到在 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo) 指定的文件

我只能假设它无法找到命令行 EXE。我需要为我调用的 EXE 提供路径吗?我可以使用当前正在执行的 UI EXE 的路径吗?

任何见解将不胜感激。

4

1 回答 1

0

在 Appstream 上,应用程序以这样一种方式启动,即感知的“基本/当前”目录不在应用程序所在的位置。由于这个相对路径应该只是通过应用程序的基本目录才能工作,因此您需要构建文件的完整路径。

使用 AppDomain.CurrentDomain.BaseDirectory 之类的东西来获取应用程序从哪里运行以构建路径。

var startInfo = new ProcessStartInfo
        {
            FileName = $"{AppDomain.CurrentDomain.BaseDirectory}My.exe",
            Arguments = '"' + jobNameToExecute + '"',
            WindowStyle = ProcessWindowStyle.Normal
        };

或者

var startInfo = new ProcessStartInfo
        {
            FileName = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"My.exe"),
            Arguments = '"' + jobNameToExecute + '"',
            WindowStyle = ProcessWindowStyle.Normal
        };

例如。

于 2021-09-10T20:17:26.923 回答