C#使用程序从python执行EXE文件

问题描述 投票:0回答:1

我有一个exe文件,使用cmd pyinstaller从python转换exe。

import csv
import math
import os
import sys
import random
InjectionFill_1Pressure=97.90995173159602
.
.
.
CoolingTime=15.469001397937381
with open('AI_MP01.csv', 'w', newline='') as outcsvfile_withopen:
writer = csv.writer(outcsvfile_withopen)
writer.writerow(['InjectionFill_1Pressure_p6100', ... ,'CoolingTime_p6171'])
writer.writerow([InjectionFill_1Pressure, ... ,'CoolingTime'])

如果我执行exe,我可以获得AI_MP01.csv。 像这样

我现在想用C#来执行exe,但是exe没有输出csv。

这是我的代码。

using System.Diagnostics;
private void button5_Click(object sender, EventArgs e)
{
/*example 1.
Process p = Process.Start(@"C:\Users\20111001\Desktop\AAA\ICAM_AI_20231027a\ICAM_AI\dist\ICAM_AI_final.exe");
p.WaitForExit();
*/
/*example 2.
string command = @"C:\Users\20111001\Desktop\AAA\ICAM_AI_20231027a\ICAM_AI\dist\ICAM_AI_final.exe";
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command)
{
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
using (Process proc = new Process())
{
proc.StartInfo = procStartInfo;
proc.Start();
return proc.StandardOutput.ReadToEnd();
}

示例1可以执行exe,但exe没有输出csv。 示例2有错误。 像这样

该exe还设置了详细信息。

请帮助我。

python c# exe
1个回答
0
投票

问题很可能是 EXE 的工作/当前目录。看起来 Python 代码假设输入文件位于当前目录中。当您使用

Process.Start
运行 EXE 时,工作目录将默认为与 .NET 应用程序相同的目录,而不是包含您正在执行的 EXE 的文件夹。您需要设置
WorkingDirectory
ProcessStartInfo
以便新进程使用不同的当前目录。就你而言,我认为应该是这样的:

var fileName = @"C:\Users\20111001\Desktop\AAA\ICAM_AI_20231027a\ICAM_AI\dist\ICAM_AI_final.exe";
var psi = new ProcessStartInfo
          {
              FileName = fileName,
              WorkingDirectory = Path.GetDirectoryName(fileName)
          };

using (var p = Process.Start(psi))
{
    p.WaitForExit();
}
© www.soinside.com 2019 - 2024. All rights reserved.