【问题标题】:Inno Setup, detecting if a parameter file exists?Inno Setup,检测参数文件是否存在?
【发布时间】:2014-10-07 13:12:46
【问题描述】:

我为 .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 但不确定如何使用它,因为它似乎不接受退货。

谢谢,

【问题讨论】:

  • 解决了!我在 MSI 命令行参数中添加了 /quiet。

标签: file installation windows-installer inno-setup


【解决方案1】:

首先,我建议您将先决条件安装移动到PrepareToInstall 事件中。这是安装先决条件的正确位置。


要回答您的问题,不,没有办法在输入处理之前检测Parameters 参数中指定的文件是否存在,并且您无法在脚本中获取该参数值。但是,如果您继续安装先决条件,您仍然可以(至少)执行以下操作:

  • 将现有的Check 函数也用于[Run] 部分条目
  • 为您的[Run] 部分条目编写Check 函数,例如仅使用FileExists 函数(但是这需要从您的Parameters 参数中复制/粘贴这些文件名)
  • 使用AfterInstall 函数立即运行刚刚处理的[Files] 条目(这将更改执行安装程序的时间)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多