C++ DLL 获取 MSI Property
VS2010 创建 C++, Win32 DLL工程C-TEST。
Stdafx.h中,在<windows.h>之后 添加引用。
#include <msi.h>
#include <msiquery.h>
C-TEST.cpp
#include "stdafx.h"
#include <tchar.h> UINT GetProperty(MSIHANDLE hInstall)
{
TCHAR* szValueBuf = NULL;
DWORD cchValueBuf = ;
UINT uiStat = MsiGetProperty(hInstall, TEXT("ProductName"), TEXT(""), &cchValueBuf);
//cchValueBuf now contains the size of the property's string, without null termination
if (ERROR_MORE_DATA == uiStat)
{
++cchValueBuf; // add 1 for null termination
szValueBuf = new TCHAR[cchValueBuf];
if (szValueBuf)
{
uiStat = MsiGetProperty(hInstall, TEXT("ProductName"), szValueBuf, &cchValueBuf);
}
} MessageBox(NULL, szValueBuf, _T("Im GetProperty"), MB_OK); if (ERROR_SUCCESS != uiStat)
{
if (szValueBuf != NULL) {
delete[] szValueBuf; }
return ERROR_INSTALL_FAILURE;
} delete[] szValueBuf; return ERROR_SUCCESS; } UINT _stdcall SampleFunction2(LPCTSTR productName, MSIHANDLE hInstall)
{
MessageBox(NULL, _T("Hello, welcome to C-TEST") ,_T("I'm Sample Function2's message"), MB_OK);
MessageBox(NULL, productName ,_T("I'm Sample Function2's break point"), MB_OK);
GetProperty(hInstall);
return ;
}
添加 C-TEST.def 文件
LIBRARY "C-TEST"
EXPORTS
SampleFunction2
编译,
1) 如果没有 #include <tchar.h>,会出现 error C3861: '_T': identifier not found
2)error LNK1120: 1 unresolved externals
解决方案:
工程右键 Property -> Configuration Properties -> Linker / Input / Additional Dependencies
添加 msi.lib
编译通过。
C++ DLL 获取 MSI Property的更多相关文章
- 微信 电脑版 HOOK(WeChat PC Hook)- 定位dll获取数据和调用功能的地址
方案一:CE搜索内存数据,OD断点查看堆栈方案二:使用旧版本的特征码,在新版本搜索方案三:借鉴WeTool的dll,用ida分析获取地址方案四:ida静态分析微信,看字符串和输出日志 源码: http ...
- 使用winmm.dll 获取麦克风声音数据
//录音 /// <summary> /// 初始化录音环境 /// </summary> /// <returns></returns> public ...
- C#调用Delphi DLL获取字符串(C# IntPtr 与 string互转 )
前因后果 调用一门锁的dll实现读取酒店IC卡数据,直接用Readme里的方法出错. 函数声明: 一.读卡函数 ************************ Delphi 调用 ****** ...
- winmm.dll获取和设置声音
[DllImport("winmm.dll")] private static extern int waveOutGetVolume(IntPtr hwo, out uint d ...
- MFC DLL获取当前路径
.首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...
- [Java][Liferay] 如何从Javascript的function中获取language property的值
问题描述 在Portlet中,Javascript中通过Liferay.Language.get("key")的方式是拿不到自己添加的property的值,原因是Liferay.L ...
- How to debug Custom Action DLL
在MSI工程中,经常会遇到这样的情况: MSI 工程需要调用DLL(C++)中的一个函数实现某些特殊或者复杂的功能,通常的做法是在Custom Action 中调用该DLL . 那么在安装过程中,该C ...
- Custom Action : dynamic link library
工具:VS2010, Installshield 2008 实现功能: 创建一个C++ win32 DLL的工程,MSI 工程需要调用这个DLL,并将Basic MSI工程中的两个参数,传递给DLL, ...
- HOWTO - Basic MSI安装包在安装运行过程中如何获取完整源路径
有朋友问到如何在一个Windows Installer安装包中获取安装包源路径,就是在安装包运行过程中动态获取*.msi所在完整路径. 这个问题分两类,如果我们的安装包只是一个*.msi安装文件,那么 ...
随机推荐
- 【转】Netty那点事(一)概述
[原文https://github.com/code4craft/netty-learning/blob/master/posts/ch1-overview.md#%E5%90%88%E5%BC%80 ...
- C#通过OLEDB导出大数据到Excel
C#导出数据到Excel,基本有两种方法,一种方法是通过Microsoft.Office.Interop.Excel.Application,一行一列的写入Excel中:另一种方法是通过OLEDB,利 ...
- DHCP Option 60 的理解
原文地址: http://blog.163.com/chenqioulin_1983/blog/static/83216232010109104430251/ 首先还是看看RFC咋说的吧.DHCP ...
- maven配置编译路径
在build标签下添加 <build> <sourceDirectory>src/main/java</sourceDirectory> <resources ...
- 离线安装Cloudera Manager5.3.4与CDH5.3.4(二)
Cloudera Manager Server和Agent所有后发先至.也能够进行CDH5的安装和配置. 然后,主节点可以通过浏览器访问7180port测试(因为CM Server需要花时间来启动,可 ...
- java堆栈 (转)
Java栈与堆 ----对这两个概念的不明好久,最终找到一篇好文,拿来共享 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自己主动管理栈和堆, ...
- CSS:表格样式(设置表格边框/文字/背景的样式)
使用CSS能够制作出十分精美的表格. 代码整理自w3school:http://www.w3school.com.cn 效果图: 代码: <!DOCTYPE html PUBLIC " ...
- 第一章 JavaScript概述
JavaScript诞生于1995年.它当时的目的是为了验证表单输入的验证.因为在JavaScript 问世之前,表单的验证都是通过服务器端验证.而当时都是电话拨号上网的年代,服务器验证数据是一件非常 ...
- php开发环境配置 web UI模板
web ui 能快速的整合进来?dwz? easyui? bootstrap 在Apache 中配置: 在http.conf中加入php的设置 #php5_startphpIniDir " ...
- 基于ArcGIS的栅格图像平滑处理(转)
基于ArcGIS的栅格图像平滑处理 栅格数据获取的途径多种多样,造成了栅格数据质量的很大差异,一些质量较差的栅格数据存在大量“噪音”象元,即在表达同类型的地理要素时,出现个别像元值与周边像元不一致的情 ...