2013-07-24 65 views
3

我有一個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; 
+1

您正在調用'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

+0

@TLama我已經做了指定的修改並編譯了代碼。但是現在,在執行安裝程序時,它只是將文件複製到一個選定的文件夾,例如C:\ Program Files(x86)\ My Program,其中包含python安裝程序, ShellExec無法正常工作。請給我指導我的代碼出了什麼問題。 – dileepVikram

+0

我的猜測是,當你調用'ShellExec'時,你沒有用'ExpandConstant('{tmp} \ python-2.7.5.msi')擴展常量。當您調用該函數時,必須擴展傳遞給該函數的路徑。 – TLama

回答

2

如Tlama所說,對腳本做了一些更改。在我身邊正常工作,更改了文件部分條目,並使用Exec代替ShellExec ...

將python-2.7.5.amd64.msi替換爲python-2.7.5.msi 並將D:\替換爲H: \

#define MyAppName "My Program" 
#define MyAppVersion "1.5" 

[Setup] 
AppId={{BD59E856-F194-4E05-A93B-89089F3E3E9D} 
AppName={#MyAppName} 
AppVersion={#MyAppVersion} 
DefaultDirName={pf}\{#MyAppName} 
DefaultGroupName={#MyAppName} 
OutputBaseFilename=setup 
Compression=lzma 
SolidCompression=yes 
DisableDirPage=yes 

[Files] 
Source: "D:\python-2.7.5.amd64.msi"; Flags: dontcopy 

[code] 
#define MinJRE "1.6" 

function InitializeSetup: Boolean; 
var 
    ErrorCode: Integer; 
    PythonInstalled: Boolean; 
    Result1: Boolean; 
    WebJRE: string; 
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('This tool requires python Runtime Environment to run. Do you want to install it now ?', mbConfirmation, MB_YESNO) = IDYES; 
    if not Result1 then 
    begin  
     Result := False; 
    end 
    else 
    begin 
     MsgBox('not installed', mbInformation, MB_OK); 
     Result := True; 

     ExtractTemporaryFile('python-2.7.5.amd64.msi') 
     WebJRE:='"'+Expandconstant('{tmp}\python-2.7.5.amd64.msi')+'"' 
     Exec('cmd.exe ','/c'+WebJRE,'', SW_HIDE,ewWaituntilterminated, Errorcode); 
    end; 
    end; 
end; 
+1

絕對不需要使用'cmd.exe'。 「ShellExec」確實類似。 – TLama

+0

@TLama我喜歡你的Edit.yes ** ShellExec **也可以正常工作。無需使用** cmd.exe **我們也可以做到這一點。我放棄了對Exec + cmd.exe的更加舒適。這是我在此使用的原因。非常感謝您的編輯和信息。 – Gangadhar

+0

不客氣! :-) – TLama