Как мне прочитать выходную папку msi в настраиваемом загрузчике / инсталляторе? - PullRequest
0 голосов
/ 20 сентября 2011

Я запустил проект Windows Forms, который по сути будет загружать несколько файлов Zip, распаковывать их и запускать установщик .msi плюс он должен был иметь возможность запрашивать значения соединения SQL на веб-сайте, который создает в одном из установщиков

Например:

  1. Загрузите установщик Web Proeject с http://domain.com/apps/site.zip и установите его
  2. Загрузите MS Charts с http://domain.com/apps/mscharts.zip и установите его
  3. Запросите сервер, базу данных, имя пользователя и пароль и замените web.config

Это то, что я пытаюсь сделать, я знаю, что я могу использовать для этого DotNetInstaller или даже Wix , но Оба проекта огромны, а кривая обучения высока, поэтому я создал свой собственный Установщик.

У меня вопрос , после того как я запустил Process для установки веб-настроек (msi, созданный Visual Studio), как я могу получить полный путь, по которому пользователь решил установить сайте?

Это необходимо, чтобы узнать, где находится файл web.config, чтобы правильно добавить новые значения подключения к SQL Server.

site.msi возвращает только целочисленное значение, используя int returnCode = process.ExitCode;, а не выходной путь.

Просто мысли вслух

Я, вероятно, могу создать пользовательскую функцию на site.msi, чтобы записать какое-то значение в Реестр , и тогда я смогу безопасно читать в моем пользовательском установщике ... это жизнеспособный вариант?

Что я могу сделать в такой среде?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Вы можете использовать WMI для поиска компонента MSI установщика web.config вашей установки:

  • Сначала вы должны определить GUID компонента для вашего компонента web.config. Откройте установочный пакет MSI с помощью инструмента Microsoft Orca (вы найдете Инструмент Orca в Windows 7 SDK).

  • Перейдите к таблице файлов . Искать web.config в столбец FileName . Запомните идентификатор компонента web.config в столбце Component_ .

  • Затем перейдите к таблице Component . Найдите свой компонент с идентификатором, найденным в таблице файла.

  • Скопируйте GUID, найденный в столбце ComponentId . Это GUID компонента для вашего файл web.config. Теперь используйте определенный GUID компонента в следующем коде:

    ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\cimv2");
    
    ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_SoftwareElement WHERE SoftwareElementID='{YOUR WEB CONFIG GUID}'");
    
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    
    ManagementObjectCollection queryCol = searcher.Get();
    
    foreach(ManagementObject m in queryCol)
    {
      Console.Out.WriteLine("Path to web.config: {0}", m["Path"]);
    }
    

Точно так же, создание пользовательского действия установщика для записи пути установки в реестр тоже хорошая идея!

Надеюсь, это поможет.

1 голос
/ 20 сентября 2011

У меня вопрос после запуска процесса установки веб-настройки ( msi, что Visual Studio создал), как я могу получить полный путь, где пользователь выбрал для установки сайта?

Обычный подход - запись в реестре:

  • в вашем проекте установки Visual Studio перейдите в редактор реестра
  • выберите ключ «Программное обеспечение [Производитель]» в HKEY_LOCAL_MACHINE или в HKEY_CURRENT_USER
  • добавьте новый ключ в поле [Производитель] и назовите его

    [ProductName]

  • в этом новом ключе добавьте строковую запись с этим значением:

    [TARGETDIR]

Таким образом, MSI запишет путь установки в этом значении реестра. После этого ваш установщик сможет прочитать путь из реестра.

...