Tôi cố gắng chạy một kịch bản python trong một thiết lập tạo ra bởi InnoSetup, nhưng không có gì hoạt động. Không có phần Chạy hoặc Exec trong phần mã Mã kết quả khác nhau tùy thuộc vào cách tôi gọi nó.Làm thế nào để thực hiện một kịch bản python với innoSetup
Tất nhiên tôi cài đặt Python trong khi thiết lập nếu nó chưa có. Đây là mã kiểm tra Inno
[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;
tôi Cố gắng sử dụng trực tiếp python.exe trong Run phần và trong mã: Exec nhưng không có cách nào.
Và tất nhiên nếu tôi gõ test.py trong cửa sổ dòng lệnh nó hoạt động, và cmd.exe /cC:\python33\python.exe C: \ ứng dụng \ test.py cũng
Ai đó đã succes sử dụng kịch bản python với innosetup?
Mục đích của việc này không phải là phân phối tệp py của ứng dụng mà sử dụng tập lệnh python trong quá trình cài đặt để thực hiện một số nội dung.
Bây giờ tôi m' sử dụng CXfreeeze để thực hiện một exe của các kịch bản nhưng tôi muốn giữ chỉ kịch bản python và không exe (cho mục đích automatisation)
để biết thông tin python kịch bản thử nghiệm chỉ là:
import ctypes
def msgbox(message,title):
ctypes.windll.user32.MessageBoxW(0, message, title, 0)
def debug() :
msgbox('test','test test')
debug()
EDIT *
Như @Tlama đề nghị tôi đã cố gắng sử dụng các lệnh trong [Run] sử dụng OriginalUser thay cho chế độ quản trị setted bởi INNO (tôi đang sử dụng các PrivilegesRequired = admin) nhưng nó không hoạt động.
Và khi tôi cài đặt python cho tất cả người dùng bằng dòng lệnh ALLUSERS = 1 người dùng hiện tại (hoặc quản trị viên) có thể chạy tập lệnh python.
tôi cũng cố gắng để thay đổi WorkingDir trong [Run] và trong Mã sản phẩm: Exec nhưng tất cả tentatives cho tôi ResultCode cùng "2"
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
trong Mã sản phẩm:
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));
Có Tôi cũng thử: "python.exe" "C: \ pyhton33 \ pyhton.exe test.py" ngay cả chỉ kịch bản thứ (python và .py được liên kết với python.exe) "test.py" không có gì hiệu quả. – user2819873
Cảm ơn sự giúp đỡ của bạn! Tôi thử sử dụng originalUser, nó cũng không có tác dụng. Tôi đã không đề cập đến nhưng tôi cố gắng một số workingdir (pyhton một, ứng dụng một ..) nó không có effet. Tôi nghĩ rằng nó liên quan đến python nhưng điều này thực sự lạ – user2819873
Ok cảm ơn bạn, tôi sử dụng Inno trong nhiều năm, nhưng lần này tôi thực sự bị mắc kẹt. – user2819873