急急急 C# 启动外部EXE,指定工作路径,调试可以用.打包软件后,EXE无法启动

时间:2021-10-27 09:34:03
如题:
 C# 启动外部EXE,指定工作路径,调试可以用.打包软件后,EXE无法启动.报告说是找不到文件.
               string exepath = @"..\Approve\test.exe";
               System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(); //声明一个进程启动信息对象
               psi.FileName = exepath; //可执行文件
               psi.WorkingDirectory = System.IO.Path.GetDirectoryName(exepath); //指定可执行文件所在目录为进程的工作目录
                System.Diagnostics.Process.Start(psi);


请牛人帮忙...........

6 个解决方案

#1


 string exepath = @"test.exe";



把test.exe文件拷贝到编译后exe所在目录

#2


多半是路径问题,运行得时候把文件路径输出一下,看看正确不

#3


这个很明显就是路径问题了。
把你要调用的外部exe跟你打包的exe放到同一个目录下。然后路径直接使用文件名就可以了,这是最简单的。

关键要搞清楚相对路径的问题。

#4


你的那代码是在安装项目(安装类)里吗?
打包后你把System.IO.Path.GetDirectoryName输出看看
你用的相对路径来定位,可安装包却是通过msiexec.exe来执行的(以它的目录为基准),最后根据它的目录为相对路径,那就不是你想要的了
要得到正确的安装路径,应该在安装类(建议你使用InstallCommited事件)里使用this.Context.Parameters["TargetDir"]来获取

#5


引用 4 楼 dongxinxi 的回复:
你的那代码是在安装项目(安装类)里吗?
打包后你把System.IO.Path.GetDirectoryName输出看看
你用的相对路径来定位,可安装包却是通过msiexec.exe来执行的(以它的目录为基准),最后根据它的目录为相对路径,那就不是你想要的了
要得到正确的安装路径,应该在安装类(建议你使用InstallCommited事件)里使用this.Context.Parameters["TargetDir"]来获取


我是在应用程序中这样写的.

#6


我现在遇到了同样得问题。楼主的解决了没有?

#1


 string exepath = @"test.exe";



把test.exe文件拷贝到编译后exe所在目录

#2


多半是路径问题,运行得时候把文件路径输出一下,看看正确不

#3


这个很明显就是路径问题了。
把你要调用的外部exe跟你打包的exe放到同一个目录下。然后路径直接使用文件名就可以了,这是最简单的。

关键要搞清楚相对路径的问题。

#4


你的那代码是在安装项目(安装类)里吗?
打包后你把System.IO.Path.GetDirectoryName输出看看
你用的相对路径来定位,可安装包却是通过msiexec.exe来执行的(以它的目录为基准),最后根据它的目录为相对路径,那就不是你想要的了
要得到正确的安装路径,应该在安装类(建议你使用InstallCommited事件)里使用this.Context.Parameters["TargetDir"]来获取

#5


引用 4 楼 dongxinxi 的回复:
你的那代码是在安装项目(安装类)里吗?
打包后你把System.IO.Path.GetDirectoryName输出看看
你用的相对路径来定位,可安装包却是通过msiexec.exe来执行的(以它的目录为基准),最后根据它的目录为相对路径,那就不是你想要的了
要得到正确的安装路径,应该在安装类(建议你使用InstallCommited事件)里使用this.Context.Parameters["TargetDir"]来获取


我是在应用程序中这样写的.

#6


我现在遇到了同样得问题。楼主的解决了没有?