2015-01-14 3 views
0

C#에서 .exe 파일을 작성했으며 수작업으로 직접 실행 (두 번 클릭)하면 파이썬으로 열려고 할 때마다 정상적으로 작동합니다. ...Python 실행 exe 파일 오류

import subprocess 

exefile = 'D:\\XX\\MyFile.exe' 
subprocess.call([exefile]) 

이 프로그램은 즉시 MyFile.exe의 작동이 중지되었습니다 "라는 충돌하는 프로그램은 프로그램을 닫으십시오 프로그램이 올바르게 작동하지 발생 :

import os 
os.system('"D:\\XX\MyFile.exe"') 

나는이 시도했다 ".

내가 당황한 것은 수동으로 실행하면 작동하지만 파이썬을 통해 실행하려고 할 때 실패합니다.

C# 응용 프로그램은 단순히 pythonscript에 대한 업데이트를 확인하기 위해 작성한 Updater입니다. 업데이트 루틴 및 정보 (.dat) 파일을로드하는 폼이 들어있는 .dll이 있습니다.

내가 빠뜨릴만한 것이 있나요?

편집 : 일부 수정 및 진단시

, 내 EXEFILE 이제 시작하지만 나는 그것이 파이썬에 의해 시작된 경우, 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(); 
     } 

    } 

이제 파이썬에서 exefile을 실행할 때마다 "로컬 업데이트 정보 파일이 손상되었습니다"라는 메시지가 표시됩니다. 하지만 수동으로 exefile (python없이)/cmd 프롬프트를 실행하면 완벽하게 정상적으로 작동합니다.

누구든지 아이디어가 있으십니까? 그것은 관리자 권한 때문입니까? 파이썬은 exe를 시작 했는가 관리자 권한이 있습니까?

+2

'exefile ='D : \\ XX \\ MyFile.exe'' 대신'exefile = '% s'% 'D : \\ XX \\ MyFile.exe''를하는 이유는 무엇입니까? –

+0

첫 번째 코드 블록에 4 개의 따옴표가 있으면 이상하게 보입니다. 대신'os.system ("D : \\ XX \ MyFile.exe")'를 사용해 보셨습니까? – Kevin

+1

'os.system (r'D : \ XX \ MyFile.exe ')'가 더 좋다. –

답변

0

좋아, 나는 그 범인을 발견했다. 그래서 나는 다음과 같은 문자열을 가지고 있습니다 : 그것은 "Updates.dat"파일의 현재 디렉토리를 봐야합니다. 그러나 파이썬을 통해 exe를 시작하면 몇 가지 이유가 있습니다. ". \"를 인식 할 수 없지만 수동으로 실행하면 괜찮습니다. 이것은 정말로 나를 괴롭힌다.

const String LocalUpdateFile = @".\Updates.dat"; 

그래서이 대신 변경할 수 있습니다. 파이썬은 exe가 잘 작동합니다.

const String LocalUpdateFile = @"D:\XX\Updates.dat"; 

하지만 왜 이런 일이 일어나고 있는지 궁금합니다. 해결책이있는 사람이 있으면 알려 주시기 바랍니다.

감사합니다.