none
Обновление до Windows 10 ломает работу Windows Insaller-а RRS feed

  • Общие обсуждения

  • Есть инсталлятор для расширения для Microsoft Word 2013 x86 - FB2 Word Viewer .

    Основным условием для запуска инсталлятора является наличие у пользователя Microsoft Word 2013 x86. Это проверяется следующим способом:

    В реестре в SOFTWARE\Microsoft\Office\15.0\Word\InstallRoot получается значение Path, которое является путём к директории где находиться WINWORD.EXE. Таким образом, наличие WINWORD.EXE в полученной директории является фактом, что Microsoft Word 2013 установлен.

    Соответственно для Windows x64 ключ в реестре будет HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Excel\InstallRoot и Path для Microsoft Word 2013 x86 обычно равен "C:\Program Files (x86)\Microsoft Office\Office15\".

    При таких условиях инсталлятор работает нормально.

    Но если происходит обновление до Windows 10, то по каким-то причинам WINWORD.EXE перемещается в папку "C:\Program Files\Microsoft Office\root\Office15\" и, соответственно, HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Excel\InstallRoot\\Path в этом случае хранит значение "C:\Program Files\Microsoft Office\root\Office15\".

    Всё бы хорошо но инсталлятор для x86 процесса воспринимает это значение, как "C:\Program Files (x86)\Microsoft Office\root\Office15\", что можно увидеть в procmon.exe:

    Таким образом Windows Insaller не может нормально отработать проверку на наличие Microsoft Word 2013 x86.

    Как это победить? Как заставить инсталлятор не искажать путь к файлу?

Все ответы

  • Покажите логи установщика:

    msiexec /i <msi> /l*v log.txt

    Кстати, это скорее всего не будет работать для Click To Run так как такого ключа не будет.

    Можно попробовать использовать другие методы. Например такой ключ:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe

    Дальше зная положение файла можно проверить его версию используя например это:

    http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/check_the_version_number.html

    Таким образом можно сделать универсальный установщик для всех поддерживаемых версий.

    Так же есть возможность искать компоненты установщика используя например ComponentSearch (или custom action). Но не уверен что данный вариант работает для CTR.

    https://support.microsoft.com/en-us/kb/234788


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • > Покажите логи установщика:

    > msiexec /i <msi> /l*v log.txt

    Здесь: http://download.docinoffice.com/for-msdn/log.txt

    Думаю, что нас интересует вот эта запись:

    MSI (c) (5C:6C) [21:01:28:289]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\Microsoft Office 15\root\Office15\' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0).


    > Дальше зная положение файла можно проверить его версию используя например это:

    > http://wixtoolset.org/documentation/manual/v3/howtos/files_and_registry/check_the_version_number.html

    Я при помощи WiX делаю инсталлятор, поэ тому сразу к ним обратился: https://github.com/wixtoolset/issues/issues/5305

    Но они в приватной беседе сказали, что эта бага в Windows Installer и помочь ни чем не могут.



  • Судя по всему замена пути это штатная фича. Проблема в том что каким то образом 32 битная версия Оффиса оказалась в 64 битном каталоге.

    Решения тут видимо такие:

    - Сделать 64 битный установщик для 32 битного Оффиса и 64 битных ОС.

    - Использовать короткие пути.

    - Перестать писать в каталог Оффиса. 

    Последнее наверное самый лучший вариант. Поясните что вы туда пишите?


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • > Проблема в том что каким то образом 32 битная версия Оффиса оказалась в 64 битном каталоге.

    Такое делает процесс обновления до Windows 10:

    1. Берём Windows 8.1 x64

    2. Ставим MS Word x86. WINWORD.EXE устанавливается в "C:\Program Files (x86)\Microsoft Office\Office15"

    3. Запускаем процесс обновления.

    4. Видим, что  WINWORD.EXE находиться в "C:\Program Files\Microsoft Office\root\Office15". И соответственно, имеем запись в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Excel\InstallRoot\\Path

    > Последнее наверное самый лучший вариант. Поясните что вы туда пишите?

    Я туда в принципе ничего не пишу. Инсталляция вообще не происходит, так как не проходит проверка на наличие MS Word x86.

  • Работа установщика не поменялась, просто какой то странный эффект от апдейта. Может то же самое было при апдейте 7->8 или 8->8.1. 

    Если фактический доступ в этот каталог не нужен, то проблема решается довольно просто: надо заменить условие. Проверяйте через реестр, скажем по ключу HKEY_CLASSES_ROOT\Word.Application\CurVer, это будет работать и для CTR вариантов. Более сложный вариант - написать custom action. Или совсем просто - уберите проверку. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • > Можно попробовать использовать другие методы. Например такой ключ:

    > HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\Winword.exe

    >Проверяйте через реестр, скажем по ключу HKEY_CLASSES_ROOT\Word.Application\CurVer, это будет работать и для CTR вариантов.

     Предложные вами методы не подходят, так как есть случая, когда у пользователя установлены две версии офиса. А в этих параметрах прописывается первая установленная.

    Если фактический доступ в этот каталог не нужен, то проблема решается довольно просто: надо заменить условие.

    К сожалению, как раз и нужно знать полный путь к используемому WINWORD.EXE, так как при установленных двух версиях офис тот, который по умолчанию может быть не тот, с которым работает моё расширение.

    На данном этапе я вижу одно решение использовать инсталлятор, который имеет собственный функционал по работе с реестром, например Inno Setup.

  • Не совсем понимаю как именно проверка пути подскажет вам какая именно версия используется "по умолчанию". 

    Опять же, на сколько часто встречается данный вариант? Офис штука дорогая, их пачками не покупают. Конечно если вы ограничены рынком России то тут может быть своя специфика.

    Конечно, если есть желание то можно использовать другой установщик. Лично я бы сделал установщик так:

    1. Только два установщика - один для 32 битной ОС, другой для 64 битной _ОС_.

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

    3. Версия для 64 битной ОС включает в себя поддержку как 32, так и 64 битой версии Офис.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • > Не совсем понимаю как именно проверка пути подскажет вам какая именно версия используется "по умолчанию".

    Фактически мне нужен путь, что бы потом его прописать "shell\open\command", чтобы файл с заданным расширением открывался нужным офисом.

    > Офис штука дорогая, их пачками не покупают. Конечно если вы ограничены рынком России то тут может быть своя специфика.

    Не покупают. Но есть люди, которые, например, долго сидят на Word 2010, а потом, наконец то, решаются купить новый - 2016, а старый оставляю на всякий случай, временно. А мы знаем, что нет ничего более вечного, чем временное.