我需要在使用visual studio 2010创建的安装程序安装和应用之前检测2个条件。
检测现有应用
除非已安装其他应用程序,否则我不需要安装应用程序。例如,如果PC上未安装MS Office,则警告用户并中止安装。
检测GAC中安装的程序集
我还需要检查一下程序集是否在GAC中。检查GAC中是否有特定版本或更高版本是理想的。
我不想包含程序集或安装先决条件。我只需要验证它是否已安装,如果没有提醒用户并中止安装。
答案 0 :(得分:5)
处理这种情况的最佳方法是使用启动条件
您可以通过右键单击Setup Project并选择
来打开启动条件编辑器查看 - > 启动条件
检测现有应用
检测现有应用程序的一种方法是设置注册表搜索和启动条件(右键单击搜索目标计算机 - >添加注册表搜索)
Office 10搜索Office 10的属性可能是
Name: Search for Office 10
Property: OFFICE10REGISTRY
RegKey: SOFTWARE\Microsoft\Office\10.0\Common\InstallRoot
Root: vsdrrHKLM
Value: Path
然后您可以添加具有这些属性的启动条件
Name: Office Installed Condition
Condition: OFFICE10REGISTRY
Message: Office 10 not detected
如果要搜索任何Office版本,可以创建多个注册表搜索,然后使用OFFICE10REGISTRY OR OFFICE11REGISTRY OR OFFICE12REGISTRY
的条件。
检测GAC中安装的程序集
这次您添加文件搜索以在gac中搜索已安装的文件。
Name:Search for Assembly In GAC
Depth: 5
FileName: Microsoft.JScript.dll
Folder: [WindowsFolder]\assembly\GAC\Microsoft.JScript
MaxVersion: 8
MinVersion: 7
Property: JSCRIPTEXISTS
请注意,文件名是dll,文件夹遵循命名空间的模式。另请注意,如果需要,您可以仅指定最小版本。
然后添加启动条件
Name: Assembly Gac Condtion
Condition: JSCRIPTEXISTS
Message: Missing JScript
完成后,最终结果可能如下所示
答案 1 :(得分:0)
由于您需要进行2次检查,我建议您通过派生安装程序类来编写自定义安装步骤(http://msdn.microsoft.com/en-us/library/79e7ka7s(v = vs.100)的.aspx)
在这里你应该重写OnBeforeInstall方法并编写你的逻辑来检查
如果其中一个检查失败,则可以抛出异常,安装将停止。
对于prereq应用程序,我建议您检查注册表配置单元。 Windows为每个已安装的应用程序创建一个注册表项。
对于GAC检查,我建议您尝试反复加载程序集而不指定路径。如果程序集加载,可以安全地假设它在GAC中
希望这有帮助
干杯, DK