我目前在Inno脚本的这一部分中有这个
[Run]
Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...
它将在应用安装期间运行vcredist安装程序。但问题是,如果用户已安装它,则抛出类似
的内容有没有办法避免这种情况,只在需要时运行此安装程序?我应该在Inno脚本中添加什么?
编辑:
在@John链接的帮助下,我做了以下功能
我还使用this site进行参考以获取visual studio 2010 crt ++产品代码,并在注册表中使用Uninstall文件夹来检测它是否已安装。
function InitializeSetup(): Boolean;
var
ErrorCode: Integer;
RedistInstalled : Boolean;
Result1 : Boolean;
begin
RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
if RedistInstalled then
begin
Result := true;
end else
begin
RedistInstalled := RegKeyExists(HKLM,'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{196BB40D-1578-3D01-B289-BEFC77A11A1E}');
if RedistInstalled then
begin
Result := true;
end else
begin
Result1 := MsgBox('This setup requires Microsoft Visual C++ 2010 Redistributable Package (x86). Please install Visual C++ 2010 Redistributable Package (x86) and run this setup again. '#13#10' '#13#10'Do you want to download Microsoft Visual C++ 2010 Redistributable Package (x86) now?',
mbConfirmation, MB_YESNO) = idYes;
if Result1 =false then
begin
Result:=false;
end else
begin
Result:=false;
ShellExec('open',
'http://download.microsoft.com/download/5/B/C/5BC5DBB3-652D-4DCE-B14A-475AB85EEF6E/vcredist_x86.exe',
'','',SW_SHOWNORMAL,ewNoWait,ErrorCode);
end;
end;
end;
end;
如果安装程序在下载/安装后仍然继续,或者我可以以某种方式调整我之前运行的代码(使用安装程序)安装程序,那仍然会很好:
[Run]
Filename: {app}\bin\vcredist_x86.exe; Parameters: "/q:a /c:""VCREDI~3.EXE /q:a /c:""""msiexec /i vcredist.msi /qn"""" """; WorkingDir: {app}\bin; StatusMsg: Installing Visual Studio 2010 C++ CRT Libraries...
但这仍然足够好。
答案 0 :(得分:0)
我遵循“官方”MS方式https://stackoverflow.com/a/199783/866333。还没有完全病毒化,但它适用于我。
有关仅检测一个版本的工作代码,请参阅Inno Setup: Verify that .NET 4.0 is installed。
这是我实际使用的代码的最佳示例:http://www.vincenzo.net/isxkb/index.php?title=.NET_-_Detect_framework
以上所有目标都是.NET框架。对于VCRT,我将从VC2010中提取可再发行组件,并让InnoSetup将内容复制到应用程序的目标安装目录。这样系统文件就不会被改变。
答案 1 :(得分:0)
关注此链接https://www.codeproject.com/Articles/20868/NET-Framework-Installer-for-InnoSetup。它适用于NET框架和VC可分发文件。您可以查明是否在PC中安装了可分发文件(例如2013)。如果未安装,它将为您安装。我强烈推荐这个。
答案 2 :(得分:0)
也许您可以使用HKLM \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ SharedDLLs。您会发现所有版本均已安装。 DLL的特殊名称取决于c ++可恢复安装:
90:Visual Studio 2008(9.0版)(atl90.dll,msvcr90.dll,msvcp90.dll)
100:Visual Studio 2010(版本10.0)(atl100.dll,msvcr100.dll,msvcp100.dll)
110:Visual Studio 2012(版本11.0)…110
120:Visual Studio 2013(版本12.0)…120
140:Visual Studio 2015(版本14.0)... 140
150:Visual Studio 2017(版本15.0)(atl150.dll,msvcr150.dll,msvcp150.dll)
160:Visual Studio 2019(版本16.0)(atl160.dll,msvcr160.dll,msvcp160.dll)
此致