pyinstaller .exe在本地工作,但是在被C#调用时失败?

时间:2019-01-12 23:08:51

标签: c# python executable pyinstaller

我已经使用Python2.7创建了一个脚本,并使用pyinstaller将其编译为同名的exe,在这种情况下,使用--onefile和-w参数将“ GeneralStats.py”转换为“ GeneralStats.exe”。 / p>

使用C#调用时,我使用:

var pythonDirectory = (Directory.GetCurrentDirectory());
var filePathExe1 = Path.Combine(pythonDirectory + "\\Python\\GeneralStats.exe");
Process.Start(filePathExe1);

在C#外部调用时,因此在我的本地文件中,我可以运行.exe,结果是一个文本文件,其中包含很多值(正确运行)。

但是,当以这种格式运行C#时,出现错误消息“ GeneralStats返回-1!”

我以前遇到过问题,但是这是一个简单的python错误,当我返回代码并运行它时,我会收到一个被我忽略的错误。 这次,我的python代码未返回任何错误,并且可以在C#之外运行。

为什么会这样?我可以提供任何必要的代码或文件目录,请问您是否认为这对调试有帮助。

编辑:

已删除:

var filePathExe1 = Path.Combine(pythonDirectory + "\\Python\\GeneralStats.exe");
Process.Start(filePathExe1);

并替换为:

ProcessStartInfo _processStartInfo = new ProcessStartInfo();
_processStartInfo.WorkingDirectory = Path.Combine(pythonDirectory + "\\Python");
_processStartInfo.FileName = @"GeneralStats.exe";
_processStartInfo.CreateNoWindow = true;
Process myProcess = Process.Start(_processStartInfo);

1 个答案:

答案 0 :(得分:1)

您需要为Process设置工作目录-它可能正在尝试从其工作目录中加载文件,但找不到它们。

例如,参见this

  

在开始该过程之前,使用ProcessStartInfo.WorkingDirectory属性进行设置。如果未设置该属性,则默认工作目录为%SYSTEMROOT%\system32

将其设置为GeneralStats.exe所在的路径。