WiX Github을 확인했는데 오늘은 불가능합니다. 일단 BURN에 MsiProperty를 정의하면 값이 비어 있는지 여부와 상관없이 값이 설정되고 MSI로 전달됩니다. 말했다되고 이제
HERE을 언급 한 바와 같이
extern "C" HRESULT MsiEngineParsePropertiesFromXml(
__in IXMLDOMNode* pixnPackage,
__out BURN_MSIPROPERTY** prgProperties,
__out DWORD* pcProperties
)
{
HRESULT hr = S_OK;
IXMLDOMNodeList* pixnNodes = NULL;
IXMLDOMNode* pixnNode = NULL;
DWORD cNodes = 0;
BURN_MSIPROPERTY* pProperties = NULL;
// select property nodes
hr = XmlSelectNodes(pixnPackage, L"MsiProperty", &pixnNodes);
ExitOnFailure(hr, "Failed to select property nodes.");
// get property node count
hr = pixnNodes->get_length((long*)&cNodes);
ExitOnFailure(hr, "Failed to get property node count.");
if (cNodes)
{
// allocate memory for properties
pProperties = (BURN_MSIPROPERTY*)MemAlloc(sizeof(BURN_MSIPROPERTY) * cNodes, TRUE);
ExitOnNull(pProperties, hr, E_OUTOFMEMORY, "Failed to allocate memory for MSI property structs.");
// parse property elements
for (DWORD i = 0; i < cNodes; ++i)
{
BURN_MSIPROPERTY* pProperty = &pProperties[i];
hr = XmlNextElement(pixnNodes, &pixnNode, NULL);
ExitOnFailure(hr, "Failed to get next node.");
// @Id
hr = XmlGetAttributeEx(pixnNode, L"Id", &pProperty->sczId);
ExitOnFailure(hr, "Failed to get @Id.");
// @Value
hr = XmlGetAttributeEx(pixnNode, L"Value", &pProperty->sczValue);
ExitOnFailure(hr, "Failed to get @Value.");
// @RollbackValue
hr = XmlGetAttributeEx(pixnNode, L"RollbackValue", &pProperty->sczRollbackValue);
if (E_NOTFOUND != hr)
{
ExitOnFailure(hr, "Failed to get @RollbackValue.");
}
// prepare next iteration
ReleaseNullObject(pixnNode);
}
}
은 다음과 같습니다
당신이 그 MSI의 저자 경우 당신이 할 수있는, WiX4.0의 새로운 기능이 될 것입니다 : 여기에 코드의 스냅 샷입니다 MSI (.wxs) 파일 내의 Property 값을 확인하고
SetProperty을 사용하여 "비어 있음"이 나오면 다른 값으로 설정하십시오.
도움이 되었습니까 ????? – Isaiah4110