2013-09-26 3 views
6

InnoSetup에 의해 생성되는 설치 중에 파이썬 스크립트를 실행하려고했지만 아무 것도 작동하지 않습니다. 실행 섹션 또는 코드에서 실행 섹션 결과 코드는 호출 방식에 따라 다릅니다.innoSetup으로 python 스크립트를 실행하는 방법

물론 아직 설치되지 않은 경우 설치 중에 Python을 설치합니다. Exec을하지만 방법 : 여기에 이노

[Setup] 
AppName=PyPy_client 
AppVersion=0.1 
DefaultDirName={pf}\DeployPyPy 
UninstallDisplayIcon={app}\test.py 
Compression = zip/1 
OutputDir=deploy 
SetupLogging = yes 
UsePreviousGroup=False 
DisableProgramGroupPage=yes 
PrivilegesRequired = admin 

[Files] 
Source: "D:\Dev\deploy_python\python-3.3.2.msi"; DestDir: "{app}\deploy"; Flags: ignoreversion 
Source: "D:\Dev\deploy_python\test.py"; DestDir: "{app}"; Flags: ignoreversion 

[Run] 
Filename: "msiexec"; Parameters: "/i ""{app}\deploy\python-3.3.2.msi"" /qb! ALLUSER=1 ADDLOCAL=ALL"; WorkingDir: "{app}\deploy"; Flags: 32bit; Check: python_is_installed 
Filename: "cmd.exe"; Parameters: "/c{code:GetPythonPath}\python.exe {app}\test.py"; WorkingDir: "{app}"; Flags: waituntilterminated 

[Code] 
function python_is_installed() : Boolean; 
var 
    key : string; 
begin 
    //check registry 
    key := 'software\Python\PythonCore\3.3\InstallPath' 
    Result := not RegValueExists(HKEY_LOCAL_MACHINE,Key,''); 
end; 

function GetPythonPath(Param : String) : String; 
var dir, key : String; 
begin 
    dir := ''; 
    key := 'software\Python\PythonCore\3.3\InstallPath' 
    RegQueryStringValue(HKEY_LOCAL_MACHINE,key,'',dir); 
    Result := dir 
end; 

procedure DeinitializeSetup(); 
var 
    ResultCode: integer; 
begin 
    if Exec('cmd.exe', ExpandConstant('/c' +GetPythonPath('')+ '\python.exe {app}\test.py'), '', SW_SHOW, ewWaitUntilTerminated, ResultCode) then 
    Log(intTostr(Resultcode)); 
end; 

내가 직접 사용하는 실행 섹션과 코드에서 python.exe를 시도 테스트 코드입니다.

그리고 나는 그것이 작동하는 Windows 명령 줄 및 cmd.exe를 /cC:\python33\python.exe C에서 test.py 입력하면 물론 : \는 \ test.py도

누군가가 이미 SUCCES 응용 프로그램 innosetup으로 파이썬 스크립트 사용하기?

이 기능의 목적은 설치 프로세스 중에 python 파일을 사용하여 배포하는 것이 아니라 물건을 만들기 위해서입니다.

가 지금은 스크립트의 EXE를 만들기 위해 CXfreeeze를 사용하여 '해요하지만 난 단지 파이썬 스크립트를 유지하고 정보 파이썬 테스트 스크립트에 대한

(automatisation 목적) exe 인하지 선호하는 단지입니다 :

import ctypes 
def msgbox(message,title): 
    ctypes.windll.user32.MessageBoxW(0, message, title, 0) 
def debug() : 
    msgbox('test','test test') 
debug() 

EDIT *

@Tlama 난 [실행]에서 명령을 사용하는 시도 주듯이 대신 관리 이노가 걸렸고 모드 (I는 PrivilegesRequired = admin을 사용하여 M)하지만의 OriginalUser를 사용 작동하지 않습니다.

그리고 모든 사용자가 명령 줄을 사용하여 Python을 설치하면 ALLUSERS = 1 기존 사용자 (또는 관리자)가 python 스크립트를 실행할 수 있습니다.

는 나는 또한 [실행]과 코드에 WorkingDir을 수정하려고

:

Log('Start pypy 1');  
    Exec('cmd.exe', ExpandConstant('/c' +GetPythonPath('')+ '\python.exe {app}\test.py'), GetPythonPath(''), SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    Log(intToStr(Resultcode)); 
    Log('Start pypy 2');  
    Exec(GetPythonPath('')+ '\python.exe', ExpandConstant('{app}\test.py'), GetPythonPath(''), SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    Log(intToStr(Resultcode)); 
    Log('Start pypy 3');  
    Exec('cmd.exe', ExpandConstant('/c' +GetPythonPath('')+ '\python.exe {app}\test.py'),ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    Log(intToStr(Resultcode)); 
+0

예 : "python.exe" "C : \ pyhton33 \ pyhton.exe test.py"스크립트 만 (파이썬은 .py는 python.exe에 링크 됨) "test.py" 아무것도 작동하지 않습니다. – user2819873

+0

도움 주셔서 감사합니다! originalUser를 사용해 보았지만 효과가 없습니다. 나는 언급하지는 않았지만 몇 가지 작업 디렉토리 (pyhton one, app one ..)를 시도했지만 아무런 효과가 없다. 나는 그것이 파이썬과 관련이 있다고 생각하지만 이것은 정말로 이상하다. – user2819873

+0

Ok, 나는 수년간 Inno를 사용하지만 이번에는 정말로 붙어있다. – user2819873

답변

3

내가 생각 : Exec을 제외한 모든 tentatives 나에게 같은 ResultCode가 "2"CODE에서

Filename: "cmd.exe"; Parameters: "/c{code:GetPythonPath}\python.exe {app}\test.py"; WorkingDir: "{app}"; Flags: waituntilterminated 
Filename: "cmd.exe"; Parameters: "/c{code:GetPythonPath}\python.exe {app}\test.py"; WorkingDir: "{code:GetPythonPath}"; Flags: waituntilterminated 
Filename: "python.exe"; Parameters: "{app}\test.py"; WorkingDir: "{code:GetPythonPath}"; Flags: waituntilterminated 
Filename: "python.exe"; Parameters: "{app}\test.py"; WorkingDir: "{app}"; Flags: waituntilterminated 

을 제공 문제는 설치 프로그램을 시작할 때 python이 경로에 존재하지 않으며 경로와 PYTHONPATH와 같은 다른 환경 변수가 프로그램이 실행되는 범위에 설정되어 있지 않다는 것입니다.

두 가지 가능성이 존재 : 그것으로

  1. 전화 파이썬이가에 설치되었는지 절대 경로, PYTHONPATH 필요한 경우처럼 명시 적으로 세트 물건을 실행하고 스크립트에서 할 수있는 스크립트의 절대 경로 - 당신은 테스트 할 수 있습니다 스크립트를 테스트 할 때 명령 행에서 -E 플래그를 사용하여 에 의해 수행하십시오. 이 단순히 python somescript.py까지 명령을 변경하려면 - 오히려 현재 프로세스에서 실행되고있는 현재에서 실행하는 것보다 환경의에서
  2. 는 등, 새 경로를 얻을 것이다 새로운 쉘을 시작
  3. (창문의 경우) start python somescript.py이 제대로 작동해야합니다.
+0

이 경우에는 첫 번째 옵션이 더 좋습니다. 작업 디렉토리를 명시 적으로 지정해야합니까 (일부 파이썬의 라이브러리 경로에 대해 모르겠습니다)? Python이 실행되어야하는 권한은 어떻습니까? 설치 프로그램은 일반적으로 관리자 권한으로 실행됩니다. 원래 사용자로 실행하는 것이 좋습니다. – TLama

+0

필수 경로는 python -E를 사용하여 테스트하는 것입니다. yourscript.py - 관리자 권한은 문제가 아니어야합니다. –

+0

파이썬으로 놀 시간이 없기 때문에 나는하지 않는다 :-) 그것은 영업 중이다. 그러나 168 명의 사용자가이 질문을 보았습니다. 현상금은 이제 너의 것이다 ;-) 나는 단지 하나의 대답이 게시되었다고 생각하고있다. 명령 행을 통해 * 외국 응용 프로그램 *에서 파이썬을 실행하는 것이 그렇게 어렵습니까? 아니면 아무도 그렇게하지 않고 있습니까? – TLama

관련 문제