Summary
This is a simple example of a DLL custom action that will get and set a property.Synopsis
This is a older example of a DLL custom action that will get and set a property. The article applies to Basic MSI Project Type.
Discussion
The following is the custom action code:
#include "windows.h"
#include "msi.h"
#include "msiquery.h"
UINT __stdcall GetInstallDir(MSIHANDLE);
UINT __stdcall SetInstallDir(MSIHANDLE);
void PostLastError(LONG);
UINT __stdcall GetInstallDir(MSIHANDLE hInstall)
{
LONG lResult;
char* lpInstallDir = new char[MAX_PATH];
DWORD pchBuff = MAX_PATH;
lResult = MsiGetProperty(hInstall, "INSTALLDIR", lpInstallDir, &pchBuff);
if (lResult==ERROR_SUCCESS)
MessageBox(NULL,lpInstallDir,"InstallDir",NULL);
else
PostLastError(lResult);
return ERROR_SUCCESS;
}
UINT __stdcall SetInstallDir(MSIHANDLE hInstall)
{
LONG lResult;
lResult = MsiSetProperty(hInstall,"INSTALLDIR","C:\\Program Files\\InstallShield");
if (lResult != ERROR_SUCCESS)
PostLastError(lResult);
return ERROR_SUCCESS;
}
void PostLastError(LONG lResult)
{
switch(lResult)
{
case ERROR_INVALID_HANDLE:
MessageBox(NULL,"Invalid Handle","ERROR",NULL);
case ERROR_INVALID_PARAMETER:
MessageBox(NULL,"Invalid Parameter","ERROR",NULL);
case ERROR_MORE_DATA:
MessageBox(NULL,"More Data","ERROR",NULL);
case ERROR_FUNCTION_FAILED:
MessageBox(NULL,"Function Failed","ERROR",NULL);
}
}
Make sure you include msi.lib in the list of library modules.
The example above uses the following DEF file:
EXPORTS
GetInstallDir @2 Private
SetInstallDir @3 Private
Was this helpful?
Related Articles
Introduction to Windows Installer Upgrade Types 31Number of Views Error Loading Type Library/DLL for Windows NT, 2000, and XP Users 6Number of Views Installshield Error Loading Type Library/DLL for Windows 98 and 98 Second Edition (SE) Users 19Number of Views Launch a Batch File With Windows Installer 9Number of Views Windows Installer Error 1907 5Number of Views
Revenera Assistant
Online
Hi, I am Reva - Ask me anything.
Updates
No new updates
Chat
Home
Updates
/**/
Thanks for the feedback!
Your feedback has been saved.Rate this response:
1
2
3
4
5
Add Additional feedback ( Optional )
0/240
English
English
Language changed successfully
Something went wrong
Email sent successfully
Something went wrong
Case create successfully
Are you sure you want to cancel
the case creation?
Please select a product to submit the case.
Please select a product version to submit the case.
0/255
Upload Attachment
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to cancel the case creation?
Case closed successfully
File Upload
Maximum file size allowed is 3 MB.
File type not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Are you sure you want to close this case
| Products | Region | Phone Numbers |
|---|---|---|
| FlexNet Operations FlexNet Embedded FlexNet Publisher FlexNet Connect FlexNet Code Insight InstallAnywhere InstallShield |
North America * |
+1 630-332-2513 (toll) +1 877-279-2853 (toll-free in North America) |
| Europe * |
+44 1925 944367 (toll) +44 800 047 8642 (toll-free in Europe) |
|
| Japan * | +81 3-4540-5335 (select option 2) | |
| Australia * |
+61 3 9895 2177 +61 1800 560 603 (toll-free in Australia) |
|
|
Usage Intelligence (formerly
Revulytics) Compliance Intelligence |
Please use the Case Portal to submit your support ticket or reach out to your Revenera contact. | |
File Upload
Maximum file
size allowed is 3 MB.
File type
not supported.
Supported file types:
Documents (.txt, .doc, .docx, .pdf), Images (.jpg, .png), Comma Separated Files
(.csv) Speadsheets (.xlsx, .xls)
Revenera Assistant
© 2026 Flexera Software. All Rights Reserved.
Case id: 00001065
Activity: Status change: 2 hours ago