我无法找到Inno Setup安装驱动程序的方法。
我在这里检查过这些问题: Inno setup: install drivers with rundll32 or dpinst? How to run a file before setup with Inno Setup和How 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)现在我的安装程序崩溃了,因为它在解压缩临时文件时找不到drivers \ dpinst64.exe。
2)在此之前,我尝试在[run]中运行.exe但没有任何反应。当.exe运行时,运行持续5毫秒,然后我得到-2147483648返回码。 Exec(ExpandConstant('{win} \ notepad.exe'),'','',SW_SHOW,ewWaitUntilTerminated,ResultCode)在InitializeSetup中运行正常。
这可能是什么问题?还有另一种更好的方法在安装程序完成其工作之前启动驱动程序安装吗?
答案 0 :(得分: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;
答案 1 :(得分:0)
回答你的问题:
1.您应该使用ExtractTemporaryFile('dpinst64.exe');
代替ExtractTemporaryFile('drivers\dpinst64.exe');
。
2.对于无法运行DPINST64.EXE,您可能需要将驱动程序的INF,SYS和任何其他依赖项提取到DPINST64.EXE的目录中。您需要多个ExtractTemporaryFile语句来提取多个文件。
答案 2 :(得分:0)
请记住,dpinst是软件首先意味着在插入设备之前它实际上并没有安装设备。