2014-10-07 97 views
0

我为.NET项目创建了一个安装程序。目的是自动构建其他MSI和必需的软件包,以便它可以扫描系统,然后根据需要自动安装正确的软件包。Inno安装程序,检测参数文件是否存在?

我到目前为止有:

[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; 

在“文件”部分工作的检查井,但是“运行”一节试图安装这是在“参数”选项指定这些AREN文件不存在,所以我收到一条错误消息。

我的问题是,有没有办法检测'参数'中指定的文件是否存在之前尝试安装?

我试过BeforeInstall但不知道如何使用它,因为它似乎不接受回报。

谢谢

+0

解决!我向MSI命令行参数添加/安静。 – SPlatten 2014-10-07 13:26:29

回答

1

首先,我建议你移动你的先决条件安装到PrepareToInstall事件。这是安装先决条件的适当位置。


要回答你的问题,没有,有没有办法来检测,如果在Parameters PARAM指定的文件条目处理之前,你不能得到脚本参数值同样存在。但是,如果你留在你安装的先决条件的方式,你仍然可以做(至少)以下内容:

  • 重用现有Check功能也为你[Run]部分条目
  • 写出来供大家[Run]部分条目例如Check功能正好与FileExists功能(但是这将需要复制/从Parameters PARAMS粘贴这些文件的名称)
  • 使用AfterInstall功能立即运行刚处理[Files]条目(这将改变的T ime当执行安装程序时)
相关问题