簡體   English   中英

Inno Setup,檢測參數文件是否存在?

[英]Inno Setup, detecting if a parameter file exists?

我為.NET項目創建了一個安裝程序。 目的是自動嵌入其他MSI和必需的軟件包,以便它可以掃描系統,然后根據需要自動安裝正確的軟件包。

到目前為止,我有:

[Files]
; Ensure all the prerequisites are installed
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\mysql-connector-net-6.8.3.msi"; Check: needsMySQLNET; DestDir: "{tmp}"; DestName: "mysqlNET.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\mysql-connector-odbc-5.3.2-win32.msi"; Check: needsMySQLODBC; DestDir: "{tmp}"; DestName: "mysqlODBC.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\sharepointclientcomponents_x64.msi"; Check: (IsWin64 and needsSharePtClient); DestDir: "{tmp}"; DestName: "sharept.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\sharepointclientcomponents_x86.msi"; Check: ((not IsWin64) and needsSharePtClient); DestDir: "{tmp}"; DestName: "sharept.msi"; Flags: solidbreak
Source: "C:\3subTimeKeeingApp\3sunptk\prerequisites\NDP451-KB2858728-x86-x64-AllOS-ENU.exe"; Check: needsFramework; DestDir: "{tmp}"; DestName: "NDP451.exe"; Flags: ignoreversion

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysqlNET.msi"""; 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mysqlODBC.msi""";
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\sharept.msi"""; 
Filename: "{tmp}\NDP451.exe"; Parameters: "/q:a /c:""install /l /q"""; WorkingDir: {tmp}; Flags: skipifdoesntexist; StatusMsg: Installing .NET Framework if needed. This may take several minutes.

[Code]
//--------------------------------------------------------------------------------
// .NET helpers
//--------------------------------------------------------------------------------
function isDotNet451Detected(): Boolean;
var 
  success: Boolean;
  release: Cardinal;
begin
  success := RegQueryDWordValue(HKLM, 
                        'SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\', 
                        'Release', 
                        release);
//For .net versions
//http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx#net_b 
  Result := success and (release = 378758);
end;

function needsFramework(): Boolean;
begin
  Result := (isDotNet451Detected = False);
end;
//--------------------------------------------------------------------------------
// MySQL .NET connector 6.8.3
//--------------------------------------------------------------------------------
function isMySQLNETconnectorInstalled(): Boolean;
var 
  success: Boolean;
  version: String;
begin
  success := RegQueryStringValue(HKLM, 
                        'SOFTWARE\Wow6432Node\MySQL AB\MySQL Connector/Net\', 
                        'Version', 
                        version); 
  Result := success and (CompareStr(version, '6.8.3') = 0);
end;

function needsMySQLNET(): Boolean;
begin
  Result := (isMySQLNETconnectorInstalled = False);
end;
//--------------------------------------------------------------------------------
// MySQL ODBC Connector 5.3
//--------------------------------------------------------------------------------
function isMySQLODBCconnectorInstalled(): Boolean;
var
  success: Boolean;
  version: String;
begin
  success := RegQueryStringValue(HKLM, 
                        'SOFTWARE\MySQL AB\MySQL Connector/ODBC 5.3\', 
                        'Version', 
                        version); 
  Result := success and (CompareStr(version, '5.3.2') = 0);
end;

function needsMySQLODBC(): boolean;
begin
  Result := (isMySQLODBCconnectorInstalled = False);
end;
//--------------------------------------------------------------------------------
// Sharepoint client components
//--------------------------------------------------------------------------------
function isSharepointClientInstalled(): Boolean;
begin
  Result := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\SharePoint Client Components');
end;

function needsSharePtClient(): Boolean;
begin
  Result := (not isSharepointClientInstalled);
end;

“文件”部分中的檢查工作正常,但是“運行”部分嘗試安裝在“參數”選項中指定的文件,但這些文件不存在,因此出現錯誤消息。

我的問題是,有沒有辦法在嘗試安裝之前檢測“參數”中指定的文件是否存在?

我已經嘗試過BeforeInstall,但不確定如何使用它,因為它似乎不接受退貨。

謝謝,

首先,我建議您將必備組件安裝移動到PrepareToInstall事件中。 這是安裝必備組件的適當位置。


要回答您的問題,不,沒有辦法在進入處理之前檢測“ Parameters參數中指定的文件是否存在,以及您無法在腳本中獲取該參數值。 但是,如果您不遵循先決條件的安裝方式,則仍然可以(至少)執行以下操作:

  • 您的[Run]部分條目也可以重復使用現有的Check功能
  • 為您的[Run]部分條目編寫代碼例如,僅使用FileExists函數Check函數(但是需要從“ Parameters參數中復制/粘貼這些文件名)
  • 使用AfterInstall函數立即運行剛剛處理的[Files]條目(這將更改安裝程序的執行時間)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM