2012-02-13 238 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软件首先意味着它,直到它已插上实际上并没有安装该设备。

相关问题