Когда API MSIGetProperty () ничего не возвращает в своем третьем параметре? - PullRequest
0 голосов
/ 03 мая 2019

Я пытаюсь запросить CLIENTPROCESSID процесса msiexec.exe с помощью API MSIGetProperty (). Третий параметр этого API должен получить значение свойства, передаваемого в соответствии с документами Microsoft. После вызова его API возвращает 0, что, я думаю, означает ERROR_SUCCESS. Однако в параметре szValueBuf есть пустое значение или ничего.

Я следовал точному методу получения значения согласно https://docs.microsoft.com/en-us/windows/desktop/api/msiquery/nf-msiquery-msigetpropertya. Я пытался просмотреть различные документы Microsoft, но не смог получить удовлетворительные ответы.

return_value = MsiGetProperty(msihandle, _T("CLIENTPROCESSID"), msiPID, &size);

Я ожидаю, что идентификатор процесса msi будет присутствовать в msiPID, но строка вообще не имеет никакого значения.

1 Ответ

0 голосов
/ 05 мая 2019

Ваш вопрос не включает в себя достаточно информации, чтобы быть уверенным в этом, но я подозреваю, что ваше пользовательское действие отложено, и поэтому CLIENTPROCESSID недоступен. Недоступные свойства обрабатываются так же, как и любое другое неустановленное свойство, и, таким образом, эквивалентны пустой строке, следовательно, успешному коду возврата с пустым выводом. Обратите внимание, что MsiGetProperty ...

Поддерживает ограниченный набор свойств при использовании с настраиваемыми действиями отложенного выполнения: свойство CustomActionData, свойство ProductCode и свойство UserSID. Настраиваемые действияCommit не могут использовать функцию MsiGetProperty для получения свойства ProductCode. Для фиксации пользовательских действий можно использовать свойство CustomActionData для получения кода продукта.

Обычно необходимо заполнить свойство CustomActionData (путем заполнения немедленным действием, упорядоченным перед отложенным действием, свойством с тем же именем, что и отложенное настраиваемое действие) для любых свойств, кроме тех, которые перечислены в приведенном выше фрагменте.

...