2014-10-07 5 views
0

Я создал настройку для .NET-проекта. Цель состоит в том, чтобы автоматически создавать другие MSI и необходимые пакеты, чтобы он мог сканировать систему, а затем автоматически устанавливать нужные пакеты по мере необходимости.Inno Setup, обнаруживает, существует ли файл параметров?

То, что я до сих пор:

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

Проверки в разделе работы «Файлы» хорошо, однако секция «Run» пытается установить файлы, которые указаны в параметре «Parameters», и они Арен Присутствую, поэтому я получаю сообщение об ошибке.

Мой вопрос в том, есть ли способ определить, существует ли файл, указанный в «Параметрах», перед попыткой установить?

Я пробовал BeforeInstall, но не уверен, как его использовать, поскольку он, похоже, не принимает возврат.

Спасибо,

+0

Решено! Я добавил/отключил параметры командной строки MSI. – SPlatten

ответ

1

Во-первых, я бы порекомендовал вам двигая Предварительные требования для установки в PrepareToInstall события. Это подходящее место для установки необходимых предварительных условий.


Чтобы ответить на ваш вопрос, нет, нет никакого способа, чтобы обнаружить, если существует файл, указанный в Parameters паров перед обработкой ввода, а также вы не можете получить, что значение параметра в сценарии. Но если вы будете оставаться на пути, который вы устанавливаете свои предпосылки, вы можете сделать (по крайней мере) следующее:

  • использовать существующие Check функций также для [Run] записей раздела
  • записи для вашего [Run] раздел записей Check функции, например, только с FileExists функции (однако, что потребует, чтобы скопировать/вставить эти имена файлов из вашего Parameters Params)
  • использовать AfterInstall функцию немедленно запустить только обработанный [Files] записи (которая приведет к изменению т ime, когда установщик будет выполнен)
Смежные вопросы