Вопрос:

При каждом входе в систему программа пытается настроить параметры установки в реестре HKEY_LOCAL_MACHINE

installation windows-installer registry sql-server-express

341 просмотра

2 ответа

119 Репутация автора

После того, как программа была установлена ​​пользователем с правами администратора, разные пользователи, не имеющие прав администратора, испытывают следующую проблему при входе в систему на одном компьютере.

При установке программы пользователем с правами администратора общая информация о соединении с базой данных SQL записывается в ключ в реестре HKEY_LOCAL_MACHINE один раз (например, (local)\sqlexpress). Затем эта информация в реестре вручную изменяется администратором для соответствующей информации о подключении к базе данных (например, Remote_location\sqlexpress). Таким образом, эта информация зависит от компьютера, а не от пользователя, поэтому программа будет работать и извлекать данные из базы данных для каждого пользователя.

После установки несколько пользователей (не являющихся администраторами) входят в систему для запуска программы:

  1. Пользователь 1 входит в систему и программа работает нормально, она обращается к базе данных. Затем выходит из системы и снова входит снова, и программа работает нормально в следующий раз.

  2. Затем пользователь 2 входит в систему и запускает программу. Появляется окно с сообщением «Пожалуйста, подождите, пока Windows сконфигурирует Программу», и ему не удается подключиться к базе данных, потому что при перенастройке соединения базы данных были перезаписаны общие данные подключения к базе данных в реестре, так что программа не может найти базу данных.

  3. Поэтому мы импортируем настройки базы данных в реестр и перезапускаем программу, и она прекрасно подключается к базе данных. Пользователь выходит из системы и снова входит в систему, и программа работает.

  4. Затем пользователь 1 снова входит в систему, и программа не работает с тем же сообщением «Пожалуйста, подождите, пока Windows сконфигурирует программу», даже если оно уже работало и работало ранее с пользователем 1.

Кажется, программа будет работать только для одного пользователя! Как мы можем решить это? Почему Windows пытается переустановить программу каждый раз, когда другой пользователь пытается войти в систему, хотя информация для подключения программы к базе данных находится в общем расположении компьютера в реестре?

Автор: user1046647 Источник Размещён: 08.11.2017 10:27

Ответы (2)


0 плюса

25724 Репутация автора

Решение

Я добавил несколько тегов к вопросу, особенно для sql-server-express .

Скорее всего, пользователи, знакомые с этим инструментом, сразу же поймут, в чем проблема.


Быстрый подход (желательно, попробуйте это):

Попробуйте вручную создать ярлык на рабочем столе пользователя, чтобы запустить соответствующее приложение . Сделайте это для обоих пользователей - и не запускайте существующий ярлык приложения (это вызовет операцию восстановления, которую мы пытаемся избежать).

Существует вероятность, что это устранит всю проблему приемлемым способом. Однако есть один вопрос: есть ли что-то специфичное для пользователя в строке подключения SQL? Содержит ли оно имя пользователя, которое должно меняться от пользователя к пользователю? Можем ли мы увидеть фактическую строку подключения?

Скорее всего, вы видите проблему самовосстановления установщика Windows. Они могут быть достаточно сложными, чтобы надежно их исправить. Существует почти наверняка довольно неприятная ошибка в пакете развертывания, которая вызывает эту проблему.


Пошаговый подход (для отладки пакетов MSI):

Самовосстановление сложно, я думаю, что пошаговый подход к отладке может быть более эффективным, чем всестороннее объяснение:

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

  2. Запишите следующий GUID: « Обнаружение продукта » в журнале событий, как описано в статье выше. Пример GUID: {A54DCC30-E1EA-4912-A7F9-6C5A3AF1FB3A}(для IIS 10.0 Express - просто пример, ваш GUID, очевидно, будет другим).

  3. Теперь выполните следующую команду PowerShell, чтобы определить имя продукта для кода продукта, найденного в журнале событий, и найти пакет MSI локального кэша, на котором выполнялась первоначальная установка. Замените приведенный ниже GUID на свой GUID (чтобы запустить PowerShell: удерживайте нажатой клавишу Windows, нажмите R, отпустите клавишу Windows, введите «powershell» и нажмите OK или нажмите «Ввод» ). IdentifyingNumberЭто путь WMI, чтобы обратиться к коду продукта, поэтому поставить свой собственный идентификатор GUID продукта в этом месте.

gwmi -Query "SELECT Name,LocalPackage FROM Win32_Product WHERE
IdentifyingNumber='{A54DCC30-E1EA-4912-A7F9-6C5A3AF1FB3A}'" | Format-Table Name,
LocalPackage

Пример команды PowerShell

  1. Предпочтительный вариант: скопируйте файл, указанный в «LocalPackage», и загрузите его куда-нибудь, где мы сможем получить к нему доступ, и дайте нам знать. В пакете есть ошибка, с которой нужно разобраться (это может быть непросто). Ничего не трогайте внутри %SystemDrive%\Windows\Installer\*.*- это «супер скрытая» папка, с которой вообще не стоит связываться. Там только действия только для чтения. Очень важный.

  2. В качестве альтернативы: возьмите инструмент для просмотра файлов MSI и выполните проверку самостоятельно. Это требует некоторых знаний MSI.

    • Полное описание некоторых инструментов MSI и их различных достоинств: Какой установочный продукт использовать? InstallShield, WiX, Wise, Advanced Installer и т. Д. (Излишне imho).
    • Если у вас установлена ​​Visual Studio, скорее всего, вам стоит установить Orca (инструмент MS SDK). Просто найдите Orca-x86_en-us.msiи установите его - это собственный официальный просмотрщик и редактор MSI от Microsoft. После установки вы можете найти Orca в меню Пуск.
    • Если у вас не установлена ​​Visual Studio, вам лучше всего попробовать Super Orca (она проста в использовании, но не была тщательно протестирована мной). Это бесплатная (в прошлый раз, когда я проверял) сторонняя альтернатива Orca.

Самовосстановление установщика Windows

Скорее всего, вы видите самовосстановление установщика Windows . Это происходит, когда система обнаружила, что установка так или иначе не завершена. Во многих случаях проблема исчезнет, ​​если вы позволите установщику завершить «восстановление», но в некоторых случаях в самом пакете установщика возникает ошибка, которая вызывает проблемы в соответствии с тем, что вы описываете.

Это сложная тема, и я уже много раз описывал, как отлаживать проблемы самовосстановления, совсем недавно здесь: на некоторых компьютерах установщик Windows снова вызывается из программы на C #, которая была загружена при запуске программы .

Для дальнейшего использования я включу несколько ссылок на тему самовосстановления установщика Windows или «отказоустойчивости»:

Автор: Stein Åsmul Размещён: 09.11.2017 05:35

0 плюса

18184 Репутация автора

По сути, вы не можете установить элемент реестра KeyPath, который будет изменен пользователем, по той простой причине, что установщик Windows посчитает, что он неисправен, и восстановит его.

Самое простое лекарство - дать этому компоненту (в вашем WiX) нулевой идентификатор компонента. Как сказано в документации, под ComponentId:

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368007(v=vs.85).aspx

Компонент с нулевым идентификатором не зарегистрирован и не подлежит восстановлению.

Вы также должны проверить, что является фактически отсутствующим компонентом, просмотрев журнал событий Windows, Приложение, и найти записи MsiInstaller, которые ссылаются на сломанный или отсутствующий компонент. В действительности может существовать другой компонент, который может быть поврежден, например, другой файл или запись в реестре. Если это так, то восстановление элемента реестра HKLM может быть последующим эффектом, поскольку при восстановлении компонента Windows восстанавливает и переустанавливает всю функцию, и это может включать запись HKLM. В любом случае, небезопасно иметь запись HKLM (зарегистрированную в MSI), которую можно изменить, поскольку существуют другие сценарии (например, восстановление из программ и компонентов или щелчок правой кнопкой мыши по файлу MSI), которые могут переписать запись реестра. Однако главное в том, что восстановление заменит эту запись в реестре.

Автор: PhilDW Размещён: 09.11.2017 07:34
Вопросы из категории :
32x32