Невозможно установить MSI с пользовательскими действиями для не-администратора с не-ascii символами в имени пользователя - PullRequest
2 голосов
/ 15 февраля 2011

Это проблема, с которой я боролся в течение нескольких дней, и теперь я в своем уме.Я создаю MSI с помощью Wise Installation Studio, но могу поспорить, что он может быть воспроизведен с помощью любой программы MSI.Я создал тестовый образец для тех, кто хочет воспроизвести файлы MSI, DLL или WSI, которые я разместил.

  1. Создайте новое мудрое решение, сохраните его как «test.wsi» и создайте «test.msi '
  2. Ничего не делать с этим файлом, кроме добавления двух пользовательских действий после действия MigrateFeaturesState в' UI Sequence '
  3. Первым пользовательским действием является «Вызов DLL из установки», которыйне передает никаких параметров и игнорирует код возврата
  4. Вторым настраиваемым действием является «Вызов пользовательской библиотеки DLL из установки», которое не передает параметров и игнорирует код возврата
  5. Оба действия ссылаются на одну и ту же DLLи та же функция, helloworld.dll и функция HelloWorld (), которая просто отображает окно с сообщением «HelloWorld»

Ожидаемый результат: два запроса hello world и затем обычный экран пользовательского интерфейса для запуска процесса установки.

Вот мои текущие настройки: Окно разработки: - Wise Installation Studio 7.4.0.214 - Win7 x64, работающая с выключенным UAC,

Окно проверки: - Windows XP SP3 - Установщик Windows v4.5.6001.22159 - .Net Framework v4.0

Вот мои тесты:

  1. Не администратор с именем пользователя ascii - Результаты ожидаемые для обоих 'ALLUSERS = "" "и ALLUSERS = "1"
  2. Администратор с Unicode-символами в имени 'あ く ぇ え' - Результаты ожидаемые как для ALLUSERS = "" ", так и для ALLUSERS =" 1 "
  3. Non-admin с символами юникода в имени '发 涩' - отображается только первое приглашение, а для второго отображается ошибка: «Ошибка в настраиваемом действии. Библиотека C: \ Documents and Settings \ ?? [LongAlphaNumericString] .TMP \WiseCustomCalla.dll недействителен или не найден. "Это происходит как для 'ALLUSERS = ""', так и для ALLUSERS = "1"
  4. Войдите в систему с другим администратором и установите пользователя в # 3 как admin, войдите в систему с пользователем в # 3 снова, и мы получим ожидаемые результаты.

Я пытался возиться с форсированием коротких путей и передачей альтернативного пути к папке с данными пользователей, но ничего не работает.Кто-нибудь знает, почему это происходит и как это исправить?Я включил здесь все файлы, которые я использовал для этого тестирования, включая снимок экрана с сообщением об ошибке, msi и msi.xml, файл wsi, helloworld.dll (тест с rundll32 helloworld.dll, HellowWorld) ипротоколы для каждого приведенного выше теста.

http://dl.dropbox.com/u/1797288/error.zip

Что необходимо изменить в файле MSI / WSI, чтобы № 3 работал правильно для действия «Вызов пользовательской библиотеки DLL из установки»?

Спасибо, Аарон П

1 Ответ

0 голосов
/ 15 февраля 2011

Я думаю, что проблема вызвана тем, как обрабатываются эти библиотеки DLL.DLL из установки хранится в двоичной таблице и автоматически извлекается во время установки.Он родной, поэтому работает как положено.

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

Попробуйте создать MSI с кодовой страницей, поддерживающей символы Unicode (вы можете установить язык MSI).Также попробуйте создать журнал и опубликовать фактический путь к DLL.

...