论坛风格切换切换到宽版
  • 4027阅读
  • 16回复

求助虎大,如何判断一个组件是否已安装。 [复制链接]

上一主题 下一主题
离线hbfnmxb
 

发帖
102
金钱
670
威望
67
只看楼主 倒序阅读 0 发表于: 2014-12-23
如何判断一个组件是否已安装。安装则跳过,没安装则继续安装!
我这里有个安装角本,要求检测Microsoft .NET Framework2.0”这个组件的的安装情况,如果没有安装此组件,则继续安装,如果已安装此组件,则跳过安装,这个要求如何实现?


下面是角本部分:

[Setup]
AppName=2015信息技术中考单机练习
AppVerName=2015信息技术中考单机练习
DefaultDirName=C:\信息技术考试单机版
DefaultGroupName=2015信息技术中考单机练习
OutputDir=e:\2015编译文件
OutputBaseFilename=2015信息技术中考单机练习
LicenseFile=README.TXT
InfoBeforeFile=D:\信息技术考试单机版\README.TXT
SetupIconFile=D:\信息技术考试单机版\djtb.ico
Compression=lzma
SolidCompression=yes
[Messages]
BeveledLabel=一个平凡的人设计封装。
[Tasks]
;Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked


[Files]
Source: D:\信息技术考试单机版\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirs




[Icons]
Name: {group}\运行“2015信息技术中考单机练习”; Filename: {app}\信息技术考试单机版.exe
Name: {group}\卸载“2015信息技术中考单机练习”; Filename: {uninstallexe}
Name: {commondesktop}\2015信息技术中考单机练习; Filename: {app}\信息技术考试单机版.exe


[Run]
; 安装结束时总是运行 dotnetfx.exe,不提示用户(如果已安装则跳过,如果没安装则继续安装,这里如何完成)
Filename: {app}\dotnetfx.exe
; 安装结束时运行 信息技术考试单机版.exe,提示用户,可选
Filename: {app}\信息技术考试单机版.exe; Description: 运行“2015信息技术中考单机练习”; Flags: nowait postinstall skipifsilent
Filename: {app}\使用说明.doc; Description: 请查看自述特别说明文件文件进行注册; Flags: postinstall shellexec skipifsilent




[Code]
var
chkMyLicense:TCheckBox;
txtMyAcceptLicense: TNewStaticText;


procedure Cus_Next(Sender:TObject);
begin
if chkMyLicense.Checked  then
WizardForm.LicenseAcceptedRadio.Checked :=True
else
WizardForm.LicenseNotAcceptedRadio.Checked :=True
end;


procedure InitializeWizard();
begin
WizardForm.LicenseMemo.Height:=155;


WizardForm.LicenseAcceptedRadio.visible:= False;  
WizardForm.LicenseNotAcceptedRadio.visible:= False;
chkMyLicense :=TCheckBox.Create(WizardForm);
chkMyLicense.Parent :=WizardForm.LicensePage;
chkMyLicense.Left :=WizardForm.LicenseMemo.Left;


chkMyLicense.Top :=WizardForm.LicenseMemo.Top + WizardForm.LicenseMemo.Height + 14;


chkMyLicense.Width:=WizardForm.LicenseMemo.Width;
chkMyLicense.Height:= ScaleY(17);
chkMyLicense.Caption :='我同意“许可协议”中的条款(&A)';
chkMyLicense.TabOrder := 0;
chkMyLicense.OnClick:= @Cus_Next;
chkMyLicense.Checked:= true;
end;


[Code]
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
  if CurUninstallStep=usPostUninstall then
    begin
      DelTree(ExpandConstant('C:\信息技术考试单机版\error'), False, True, True);
      DelTree(ExpandConstant('C:\信息技术考试单机版\data'), False, True, True);
      DelTree(ExpandConstant('C:\信息技术考试单机版\建立磁盘映射.bat'), False, True, True);
      DelTree(ExpandConstant('C:\信息技术考试单机版'), False, True, True);
    end;
end;

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2014-12-23
[Run]
; 安装结束时总是运行 dotnetfx.exe,不提示用户(如果已安装则跳过,如果没安装则继续安装,这里如何完成)
Filename: {app}\dotnetfx.exe; Check: not netframework2_installed

[code]
function netframework2_installed(): Boolean;
begin
  result := false;
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727') then
    result := true;
end;
离线hbfnmxb

发帖
102
金钱
670
威望
67
只看该作者 2 发表于: 2014-12-24
谢谢虎大,成功。神!!
离线qqjszl

发帖
126
金钱
1210
威望
121
只看该作者 3 发表于: 2015-02-28
虎大!那如果是DirectX呢?
离线qqjszl

发帖
126
金钱
1210
威望
121
只看该作者 4 发表于: 2015-02-28
虎大!
你的脚本里面
Filename: {app}\dotnetfx.exe; Check: not netframework2_installed

[code]
function netframework2_installed(): Boolean;
begin
  result := false;
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727') then
    result := true;
end;

Check: not netframework2_installed和function netframework2_installed(): Boolean;是什么意思呢???
离线qqjszl

发帖
126
金钱
1210
威望
121
只看该作者 5 发表于: 2015-02-28
虎大我自己测试下DirectX你帮我看看有没有对

[Run]
Filename: "{app}\_CommonRedist\DirectX\DXSETUP.exe"; Check: not DirectX_installed

[code]
function DirectX_installed(): Boolean;
begin
  result := false;
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\DirectX') then
    result := true;
end;

是正确的么???
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 6 发表于: 2015-02-28
句法是没有问题。你自己试试看吧。
离线qqjszl

发帖
126
金钱
1210
威望
121
只看该作者 7 发表于: 2015-02-28
虎大!一次只回答一个问题啊。。
Check: not netframework2_installed和function netframework2_installed(): Boolean;是什么意思呢???
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 8 发表于: 2015-02-28
最好参考帮助文件中关于 Check 参数的说明。
离线qqjszl

发帖
126
金钱
1210
威望
121
只看该作者 9 发表于: 2015-03-08
虎大!请问判断DirecX 9.0是否已经安装的脚本有没有对啊!
[Run]
Filename: "{app}\Redist\DirectX\DXSETUP.exe"; Check: not DirectX_installed
[code]

function DirectX_installed(): Boolean;
begin
  result := false;
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\DirectX') then
    result := true;
end;