2012-02-13 288 views
3

我找不到Inno安裝程序安裝驅動程序的方法。Inno安裝程序驅動程序安裝

我已經在這裏檢查了這些問題: Inno setup: install drivers with rundll32 or dpinst? How to run a file before setup with Inno SetupHow to install DirectX redistributable from Inno-setup?

我的代碼是這樣的:

[Files] 
Source: "drivers\dpinst64.exe"; DestDir: "{app}\drivers"; Check: Is64BitInstallMode; Components: drivers; 

[code] 
function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
ResultCode: Integer; 
begin 

    if IsWin64 then begin 
     ExtractTemporaryFile('drivers\dpinst64.exe'); 
     Exec(ExpandConstant('{tmp}\dpinst64.exe'), '-install "' + ExpandConstant('{tmp}') + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    end;  

end; 

1)現在我的安裝程序將會崩潰,因爲提取的臨時文件時,它無法找到驅動程序\ dpinst64.exe。

2)在此之前,我試圖在[運行]中簡單地運行.exe,但沒有發生任何事情。當.exe運行時,運行持續5毫秒,然後我得到了-2147483648返回碼。 Exec(ExpandConstant('{win} \ notepad.exe'),'','',SW_SHOW,ewWaitUntilTerminated,ResultCode)在InitializeSetup中運行得很好。

這裏有什麼問題?在安裝者完成工作之前,是否有另一種更好的方式來啓動驅動程序的安裝?

回答

1

如果你試試這個,會發生什麼?

什麼是安裝dpinst64.exe的參數?從你的嘗試,它看起來像這樣(假設{} TMP最終被WINDOWS%TEMP%):

%TEMP%\dpinst64.exe -install "%TEMP%" 

是否安裝dpinst64.exe正確的說法?

[Files] 
Source: "drivers\dpinst64.exe"; DestDir: "{tmp}"; Check: Is64BitInstallMode; Components: drivers; 

[Code] 
function PrepareToInstall(var NeedsRestart: Boolean): String; 
var 
ResultCode: Integer; 
begin 

    if IsWin64 then begin 
     ExtractTemporaryFile('dpinst64.exe'); 
     Exec(ExpandConstant('{tmp}\dpinst64.exe'), '-install "' + ExpandConstant('{tmp}') + '"', '', SW_SHOW, ewWaitUntilTerminated, ResultCode); 
    end;  

end; 

我認爲司機dpinst64.exe是在源的drivers文件夾,需要在您的安裝程序被分配的唯一文件。如果不是的話,那麼你應該鍵入如下:

[Files] 
Source: "drivers\*"; DestDir: "{tmp}"; Check: Is64BitInstallMode; Components: drivers; 
+0

我忘了,司機的exe還需要與它的幾個文件和庫,你說得對。 Bun現在我應該使用類似於:Source「drivers \ amd64 \ *」; DestDir:「{tmp} \ amd64」;組件:驅動程序 – Paul 2012-02-13 15:39:21

+0

@Paul足夠好了,至少現在你的想法是:) – ecle 2012-02-13 15:44:21

0

回答您的問題:1。 您應該使用ExtractTemporaryFile('dpinst64.exe');而不是ExtractTemporaryFile('drivers\dpinst64.exe');。 2.對於無法運行DPINST64.EXE,您可能需要將驅動程序的INF,SYS和任何其他依賴項解壓縮到DPINST64.EXE所在的目錄中。您需要多個ExtractTemporaryFile語句來提取多個文件。

+0

在安裝時是否允許{tmp}文件夾中的子文件夾? – Paul 2012-02-13 15:42:30

+0

@Paul是的,你可以在'{tmp}'下創建子文件夾,因爲'{tmp}'最終是Windows下的%TEMP%文件夾。如果你看一下%TEMP%,它會有很多安裝程序創建的子文件夾......因此,你可以創建'{tmp} \ mydrivers'來在'{tmp}'文件夾下創建一個名爲'mydrivers'的子文件夾 – ecle 2012-02-13 16:06:39

+0

已嘗試[Dirs]名稱:「{tmp} \ drivers」;和[文件]來源:「drivers \ *」; DestDir:「{tmp} \ drivers」;組件:司機;但是,提取文件時,它們都在同一級別上提取,而忽略驅動程序文件夾的初始層次結構,這根本沒有用處。如果我省略提取,那麼{tmp}文件夾中絕對沒有文件 - 我的猜測是在安裝的兩個階段它是一個不同的{tmp}文件夾。即使提取到tmp之後,是否還有任何方法可以保持初始文件夾結構? – Paul 2012-02-13 16:25:08

0

記住,是的DPInst軟件首先意味着它,直到它已插上實際上並沒有安裝該設備。

相關問題