среда, 13 июня 2012 г.

Visual Studio Setup Project. Сохранение и восстановление установочного пути в реестре

[Visual Studio Setup Project. Reading and writing the installation path in the registry]

Setup Project в VisualStudio можно настроить так, чтобы перед установкой программы предыдущая версия удалялась: RemovePreviousVersion = true. На всякий случай напомню, что для корректной работы этого параметра необходимо увеличивать версию установочной программы - свойство Version.


Но есть одна неприятная вещь: путь, предлагаемый в диалоге выбора пути установки, полностью игнорирует выбор, сделанный пользователем в предыдущий раз. Установка удаляет старую версию программы и начинает новую практически с чистого листа. О сохранении каких-либо параметров нужно беспокоится самому. К счастью, есть возможность сделать это относительно просто, не написав, при этом, ни строчки кода. Решение проверено в немецкой Visual Studio 2010 (соответствующие “немецкие” скриншоты, не пугайтесь), уверен будет работать в VS 2008, и наверняка в VS 2005. Для этого нужно выполнить следующие шаги.

1. Установка пути по умолчанию. Во время первой установки необходимо предложить путь и здесь для вас ничего не меняется - определите DefaultLocation как вы это делали раньше (обычно это пусть к каталогу "Program Files" и далее в папку вашей фирмы и/или вашего продукта). Значение этого пути сохраняется во внутренней служебной переменой [TARGETDIR], пользователь может изменить его в диалоге выбора пути установки.


 2. Сохраняем путь в реестре. Для этого нужно определить создаваемую во время установки в реестре строку, например, как у меня под именем “HKEY_LOCAL_MACHINE\Software\[Manufacturer]\InstallPath”. Программа установки присвоит ей значение переменной “[TARGETDIR]”, которая будет содержать установочный путь.


3. Чтение пути из реестра. Для этого нужно определить "условие для запуска" (мой вольный перевод, лучше смотрите скриншот), которое читает реестр и сохраняет значение в определенной переменной. Установите в полях RegKey, Root и Value значения, которые вы задали для сохраняемого пути. И, наконец, трюк, который позволяет этому работать - в поле Property задайте имя переменной TARGETDIR.


PS. До этого решения мне помогла додуматься статья http://support.microsoft.com/kb/827026. Основное отличие от моего заключается в том, что в ней строковое значение реестра читается в пользовательскую переменную, которая присваивается полю “DefaultLocation” (свойство “пути приложения”). Но если ключа еще не существует (самая первая установка), путь остается не определен, и пользователь увидит, скорее всего, в диалоге выбора пути “C:\”.

Комментариев нет: