我已经在C#中编写了一个.exe文件,如果我手动手动启动它(双击),但每次我尝试用python打开它时都可以。
import os
os.system('"D:\\XX\MyFile.exe"')
我也试过这个:
import subprocess
exefile = 'D:\\XX\\MyFile.exe'
subprocess.call([exefile])
程序立即崩溃说" MyFile.exe已停止工作。程序导致程序无法正常工作。请关闭该计划。"。
现在让我感到困惑的是,如果我手动运行它的工作,但是当我尝试通过Python启动它时它会失败。
C#应用程序只是我写的一个更新程序,用于检查我的pythonscripts的更新。它有一个.dll,它包含更新例程和加载(.dat)文件以获取信息的表单。
有什么我想念的吗?
修改
经过一些修改和诊断后,我的exefile现在开始了,但我意识到如果它是由Python启动的,那么exe就无法在我的C#应用程序中执行以下功能。
private UpdateSaveFile DecodeSaveFile(string LocalUpdateFile)
{
FileStream localFileStream = null;
BinaryFormatter decoder = null;
try
{
localFileStream = File.Open(LocalUpdateFile, FileMode.Open, FileAccess.Read);
decoder = new BinaryFormatter();
return (UpdateSaveFile)decoder.Deserialize(localFileStream);
}
catch (Exception e)
{
throw new InvalidDataException("The local update info file is corrupt!", e);
}
finally
{
if (localFileStream != null)
localFileStream.Dispose();
}
}
现在每当我从python运行exefile时,它都会抛出"本地更新信息文件已损坏"。但是如果我手动运行exefile(没有python)/ cmd提示符,它就可以正常运行。
任何人都有任何想法?是因为管理员权限吗? python启动的exe是否具有管理员权限?
答案 0 :(得分:0)
好的,我找到了罪魁祸首。所以我有一个这样的字符串:它应该查看文件“Updates.dat”的当前目录。但是出于某些原因,如果我通过Python启动exe。它无法识别“。\”但如果我手动运行它,它没关系。这真让我困惑。
const String LocalUpdateFile = @".\Updates.dat";
所以,相反,如果我改变这个。 python启动exe工作正常。
const String LocalUpdateFile = @"D:\XX\Updates.dat";
但我真的很好奇为什么会这样。如果有人有任何解决方案,请告诉我。
谢谢!