2012-02-16 21 views
6

Aşağıdaki kodu Inno Setup ile aldım.Inno Setup ile .msi dosyası nasıl kullanılır?

Bu benzer işlevi .msi dosyasına nasıl uygularım?

msiexec /I "\package\file.msi" /qb? Nasıl?

ShellExec('', 'msiexec.exe', 
    ExpandConstant('/I "{tmp}\package\file.msi" /qb'), 
    '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode); 

Veya:

procedure AfterMyProgInstall(S: String); 
var 
    ErrorCode: Integer; 
begin 
    {MsgBox('Please wait the libraries are getting installed, ' + 
      'without the libraries it wont work.', mbInformation, MB_OK);} 
    ExtractTemporaryFile(S); 
    {SW_SHOW, SW_SHOWNORMAL, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_HIDE} 
    ShellExec('', ExpandConstant('{app}\package\' + S), '', '', SW_SHOWNORMAL, 
      ewWaitUntilTerminated, ErrorCode); 
end; 

cevap

15

bu deneyin

[Files] 
Source: file.msi; DestDir: {tmp}; Flags: deleteafterinstall; 

[Run] 
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\file.msi"" /qb"; WorkingDir: {tmp}; 
+0

otomatik olsa innosetup kaldırma rutin bir parçası olarak msi kaldırmak için herhangi bir yolu var mı? – Nyerguds

3

Not o: Ben Windows 7 Inno Setup 5.5.3 kullanarak ve bu kod olduğunu ediyorum run bölümündeki Inno Setup betiği için. Bu kod ile msi dosyalarını sorunsuz çalıştırabilirsiniz. İşte kodu @kobik verdi:

5

. Dosyaya '.exe'yi eklemeliydim. böylece gibi:

if not ShellExec('', 'msiexec.exe', ExpandConstant('{tmp}\package\file.msi'), 
    '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode) 
then 
    MsgBox('Msi installer failed to run!' + #13#10 + ' ' + 
    SysErrorMessage(ErrorCode), mbError, MB_OK); 
+0

** [digitalextremist] (http://stackoverflow.com/users/1169705/digitalextremist) **: Yorumlarda kod bloklarını yayınlamak satır sonlarını kaldırır ve okunmasını zorlaştırır. Ancak, bir cevap onu çok açık hale getirir. –

+1

@digitalextremist: Alan ile anlaştı, bu kod bir yorumun bir parçası olarak kesinlikle hoş olmazdı. –

+1

@mike, elbette kobik "bütün kodu göstermedim". Bu en çok bir yorumdur ... Ayrıca, Windows Kabuğu'nun dosyayı kendisi açmasına izin vermek daha iyi olmaz mıydı? Yani, sadece MSI paketi dosya adını 'Filename' parametresine geçiriyorum. Windows Installer kuruluysa ve MSI paketleri tarafından yürütülecekse, Shell bunu işleyecektir. – TLama

İlgili konular