我有一個inno設置代碼,它安裝了python。它工作正常,我得到setup.exe文件與其中的python設置文件。但是,當我嘗試安裝與該安裝文件的Python,它沒有工作。這是因爲安裝文件正在尋找文件部分中指定的python文件,如果是的話如何更改代碼,使裏面的python setup.exe將被使用。此外,安裝程序正在創建一個默認應用程序,每次當我安裝設置。我已經嘗試了屬性DisableDirPage =是,但它沒有奏效。任何機構能否爲此提出一些解決方案。Inno設置代碼來安裝python
#define MyAppName "My Program"
#define MyAppVersion "1.5"
[Setup]
AppId={{BD59E856-F194-4E05-A93B-89089F3E3E9D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
;AppPublisher={#MyAppPublisher}
;AppPublisherURL={#MyAppURL}
;AppSupportURL={#MyAppURL}
;AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
DisableDirPage=yes
[Files]
Source: "H:\python-2.7.5.msi"; DestDir: "{app}"; Flags: ignoreversion
[code]
#define MinJRE "1.6"
#define WebJRE "H:\python-2.7.5.msi"
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
PythonInstalled : Boolean;
Result1 : Boolean;
begin
PythonInstalled := RegKeyExists(HKLM,'SOFTWARE\Wow6432Node\Python\PythonCore\2.7\InstallPath');
if PythonInstalled then
begin
MsgBox('installed', mbInformation, MB_OK);
end
else
begin
Result1 := MsgBox('2222222222222222This tool requires python Runtime Environment to run. Do you want to install it now?',
mbConfirmation, MB_YESNO) = idYes;
if Result1 = false then
begin
Result:=false;
end
else
begin
MsgBox('not installed', mbInformation, MB_OK);
Result:=true;
ShellExec('',
'{#WebJRE}',
'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
end;
end;
您正在調用'ShellExec'傳遞'#WebJRE'常量,該常量位於'H:'驅動器的某處。將'[Files]'條目更改爲'Source:「H:\ python-2.7.5.msi」;標誌:dontcopy',因爲我認爲你不想將該安裝程序複製到目標應用程序文件夾中。在調用'ShellExec'之前,'InitializeSetup'事件方法使用'ExtractTemporaryFile('python-2.7.5.msi')',然後從'{tmp} \ python-2.7.5.msi'路徑執行。你也應該改進你的代碼格式並添加錯誤處理。 – TLama
@TLama我已經做了指定的修改並編譯了代碼。但是現在,在執行安裝程序時,它只是將文件複製到一個選定的文件夾,例如C:\ Program Files(x86)\ My Program,其中包含python安裝程序, ShellExec無法正常工作。請給我指導我的代碼出了什麼問題。 – dileepVikram
我的猜測是,當你調用'ShellExec'時,你沒有用'ExpandConstant('{tmp} \ python-2.7.5.msi')擴展常量。當您調用該函數時,必須擴展傳遞給該函數的路徑。 – TLama