我有一个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 代码假设输入文件位于当前目录中。当您使用
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();
}