Чтение текущей установленной версии приложения с использованием Windows API - PullRequest
3 голосов
/ 11 сентября 2011

Я пытался использовать windows api, чтобы узнать информацию о версии установленного приложения.

Я использовал код обновления, чтобы узнать код продукта, используя MsiEnumRelatedProducts api, но когда я пытаюсь использовать MsiGetProductInfo, используякод продукта, информация о версии возвращается как мусор.

Вот мой MsiGetProductInfo api:

[DllImport("msi.dll", CharSet = CharSet.Unicode)]
private static extern Int32 MsiGetProductInfo(
    string product, string property, [Out] StringBuilder valueBuf,
    ref Int32 len);

MsiGetProductInfo(sbProductCode, "INSTALLPROPERTY_INSTALLVERSION", builder, ref len);

Есть мысли о том, что я делаю неправильно?

Ответы [ 3 ]

2 голосов
/ 11 сентября 2011

Вот что я сделал, чтобы решить мою проблему.

        Int32 m_len = 11512;
        StringBuilder m_versionInfo = new StringBuilder(m_len);

        StringBuilder m_sbProductCode = GetProductCodeFromMsiUpgradeCode();
        MsiGetProductInfo(m_sbProductCode.ToString(), "**VersionString**", m_versionInfo, ref m_len);

        return m_versionInfo.ToString();

Это вернуло мне строку версии, а также преобразовал ее из десятичного в строковый формат, как 1.4.3.

2 голосов
/ 26 мая 2016

В ответ на @JoshHetland передаваемая строка является постфиксом CamelCase INSTALLPROPERTY_VERSIONSTRING - помните, что MSI чувствителен к регистру.

Итак:

INSTALLPROPERTY_VERSIONSTRING становится VersionString

INSTALLPROPERTY_INSTALLDATE становится InstallDate

и т. Д.

Полный список доступных свойств приведен на странице MSDN для функции MsiGetProductInfo .

0 голосов
/ 11 сентября 2011

Application.ProductVersion работает для меня, нет необходимости вручную вызывать WinAPI (хотя я все еще в .Net 1.1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...