Пользовательское действие FileOpenDialog из vbScript отображается за основным диалоговым окном

Я создаю установщик на работе, который должен открывать файловый браузер. В wix нет браузера файлов, поэтому я создал собственное действие vbscript, использующее метод Shell.BrowseForFolder. Он работает нормально, но диалоговое окно файла отображается за основным окном wix. Кто-нибудь знает подход wix/vbscript, который я мог бы использовать для решения этой проблемы?


person user2437443    schedule 16.12.2013    source источник


Ответы (1)


Найдите HWND для пользовательского интерфейса MSI и передайте его в Shell.BrowseForFolder. Я вижу несколько примеров решений, использующих FindWindow("MsiDialogCloseClass", vbNullString). Будьте осторожны при запуске пользовательского интерфейса из настраиваемого действия: вам нужно рассмотреть автоматическую установку/восстановление/удаление и т. д., чтобы убедиться, что вы все делаете правильно во всех случаях.

Похоже, вы пытаетесь разрешить пользователю выбирать каталог. MSI имеет встроенную поддержку для этого. Я рекомендую вам использовать это. Пример см. на странице http://wix.codeplex.com/SourceControl/latest#src/ext/UIExtension/wixlib/BrowseDlg.wxs.

person TheESJ    schedule 16.12.2013
comment
Спасибо за быстрый ответ! Я пытаюсь разрешить пользователю выбирать конкретный файл, а не только каталог, поэтому я думаю, что мне нужно специальное действие. Я новичок в wix и во всем, что связано с msi, не могли бы вы сказать мне, как мне найти HWND и как передать его в функцию vbScript? - person user2437443; 17.12.2013
comment
MSI не раскрывает HWND, поэтому вам нужно найти его самостоятельно. Незнание MSI здесь не должно вас сдерживать. Используйте FindWindow, чтобы найти окно по имени, как я уже упоминал. В качестве альтернативы вы можете перечислить окна в системе, чтобы найти то, которое соответствует ожидаемым вами критериям (заголовок, идентификатор процесса и т. д.). Вы можете обнаружить, что VBScript действительно ограничивает ваши возможности, учитывая ограниченную доступную площадь поверхности. - person TheESJ; 17.12.2013