如何判断msi安装包程序是否安装及安装路径

使用MSI的函数可以检测软件是否安装,获取安装版本信息等,前提是软件为.msi文件安装的。

在使用前建议加上如下头文件及库依赖:

#include <Windows.h>
#include <Msi.h>
#pragma comment(lib, "Msi.lib")

1. 检测软件是否安装,upgradeCode用于标示从一个版本升级到另一个版本,一般可以用于判断是否是同一个软件。

bool CheckExistSoftware(wchar_t *upgradeCode)  //可以通过工具Orca查看安装包相应的upgradeCode
{
    wchar_t productCode[39];
    if (ERROR_SUCCESS == MsiEnumRelatedProductsW(upgradeCode, 0, 0, productCode))
    {
        return true;
    }
    return false;
}

2. 获取软件的安装路径

void GetSoftwareInstallPath(const wchar_t *upgradeCode, wchar_t *installPath, DWORD *pathLength)
{
	DWORD i = 0;
	UINT result;
	wchar_t productCode[39];
	for (i = 0; ERROR_NO_MORE_ITEMS != (result = MsiEnumRelatedProductsW(upgradeCode, 0, i, productCode)); i++)
	{
		if (ERROR_SUCCESS == result)
		{
			if (ERROR_SUCCESS == MsiGetProductInfoW(productCode, INSTALLPROPERTY_INSTALLLOCATION, installPath, pathLength))
			{
				return;
			}
		}
	}
	wcscpy_s(installPath, 2, L"");
}
时间: 2025-01-02 23:35:19

如何判断msi安装包程序是否安装及安装路径的相关文章

arcgis安装msi安装包提示&quot;在未标记为正在运行时,调用了RunScript”解决办法

安装msi安装包提示"在未标记为正在运行时,调用了RunScript”解决办法 windows/temp目录相关权限不对,右击temp文件夹,选择管理员获取所有权限.

自定义msi安装包的执行过程

有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品的安装交互UI显然是不恰当的.我们期望用一个统一的自定义UI去取代每个产品各自的UI. 平时使用msiexec.exe习惯了,所以最直接的想法就是在一个子进程中执行: msiexec.exe /qn 这样固然是能够完成任务,但是不是太简陋了? 安装开始后我们想取消这次安装怎么办? 或者我们还想要拿到

电脑运行msi安装包提示the error code is 2503/2502如何解决

当在电脑中运行msi安装包时,出现the error code is 2503或者2502错误提示,其实是由于没有运行的权限导致的,但是又不能右击以管理员身份运行,那么应该如何操作呢?对于这样的问题,我们可以参考以下方法进行解决. 1.按Win+X选择"命令提示符(管理员)",或者右击命令提示符选择以管理员身份运行; 2.记住安装包的保存路径,尽量不要放桌面,因为路径会很长,因此建议可以直接保存到根目录下,比如"D:\",那么路径就是D:\python-2.7.11

Wix 快速开发安装包程序 (一)5分钟构建一个最轻量的安装包程序

Wix 被广泛应用在制作安装包程序,相比于微软官方提供的安装包模板更灵活和便捷. 一.环境搭建: 网站地址:https://wixtoolset.org 1. 安装Wix,必备 2. 安装VS 扩展,根据自己使用的VS版本下载相应的扩展.可选,为了方便的使用VS创建wix工程并编译. 二.安装包目标应用程序: 目的:安装一个exe ,一个dll,一个pdf文件 制作流程: 1. 编写符合wix规范的一份wxs类型的文件 2. 使用命令编译中间产物 candle.exe SampleFirst.w

Adobe Flash Player 32.0 插件离线安装包下载(无需联网安装)

网上很多人声称并提供的flash离线安装包是需要联网才能安装成功的,其实就是在线安装包,而这里提供的是真正的离线安装包,无需联网即可安装成功. 点击下面地址下载离线安装包: Adobe Flash Player 32.0.0.156 for IE   提取码:gs7l Adobe Flash Player 32.0.0.156 for Firefox   提取码:x8ti Adobe Flash Player 32.0.0.156 for Opera&Chrome   提取码:jfwz Adob

Wix 快速开发安装包程序 (三)变量和条件判断

在 wix 中经常使用变量和条件判断,在这里也做一个总结 一. 变量 1. windows installer 使用关键字 windows 安装包的关键字,它的值是需要推迟到安装包在用户的机器,安装中才能确定并赋值的 举例,我们之前写的这句话 <Property Id="USER32VERSION"> <DirectorySearch Id="SystemFolderDriverVersion" Path="[SystemFolder]&

Wix 快速开发安装包程序 (四)使用简单的UI

前面总结了一些 wix 制作安装包最基本的一些功能,虽然也可以成功产出安装包. 不过这样的安装包既没有UI设计,也没有任何和用户的任何交互,连安装位置也不能修改. 这一小节,简单的使用 wix 提供的一个内置模板,做一个能看的安装包. 1. 工程添加 wix dll 的引用 2.  使用 WixUI_Mondo <UIRef Id="WixUI_Mondo" /> <UIRef Id="WixUI_ErrorProgressText" />

[笔记]WiX制作msi安装包的例子

WiX是制作msi安装文件的工具,看了半天文档,感觉没有什么比一个例子更简单粗暴的了. <?xml version="1.0" encoding="UTF-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Name="HelloMSI" Language="1033&

aix光盘安装包 aix puppet agent 自动化安装

脚本待处理事务1,替换指定行数据2,获取$1 :字段分割 [Tips Notes,byRui]从光盘等安装媒介中isntallp -l -d /opt/ruiyhe or /dev/cd0 搜索所有的packages,以:坐字段分割符,使用shell截取$2字段,捕获到的这个字段就是光盘中可以使用的软件包的Name 为了便于脚本程序获取包名,通常使用installp -L -d /opt/ruiy >byRuiy installp -ug pNameinstallp -ad -Y /opt/ru