0

Я пытаюсь создать приложение с помощью установщика Windows в качестве метода установки. Когда установка завершится успешно, я хочу получить путь, в котором находится первичный вывод, который я настроил в установщике. В моем случае основной вывод находится в папке [ApplicationData(Installroot)]\Bin\.C# Setup Project Custom Action, чтобы сохранить каталог установки в файл настраиваемых настроек

У меня также есть пользовательский файл настроек под названием App.Settings в 1 моей библиотеке классов, который управляет несколькими настройками, такими как расположение файлов, которые относятся к месту установки.

Итак, идея заключается в том, что при успешном завершении установки она должна вызывать настройки App.Settings и сохранять папку установки в файл настроек.

Я уже сделал класс установки и поместил его в библиотеку классов. Я не уверен, что он должен быть в этом проекте. Это код Установка класса:

using System.Collections; 
using System.ComponentModel; 

namespace WaspbaneModels 
{ 
    [RunInstaller(true)] 
    public partial class Installer : System.Configuration.Install.Installer 
    { 
     public Installer() 
     { 
      InitializeComponent(); 
     } 

     public override void Install(IDictionary stateSaver) 
     { 
      base.Install(stateSaver); 
     } 

     public override void Commit(IDictionary savedState) 
     { 
      base.Commit(savedState); 

      SettingsControl.BaseURL = Context.Parameters["assemblypath"]; 
      SettingsControl.Save(); 
     } 

     public override void Rollback(IDictionary savedState) 
     { 
      base.Rollback(savedState); 
     } 

     public override void Uninstall(IDictionary savedState) 
     { 
      base.Uninstall(savedState); 
     } 
    } 
} 

В этом коде SettingsControl класс, который заботится о настройках, просто с некоторыми свойствами. Я использовал этот класс, чтобы мой проект Windows Forms также мог получить доступ к этим настройкам.

На вкладке «Пользовательские действия» я также добавил первичный вывод ко всему. Я также не уверен, что это правильно, потому что я думаю, что первичный вывод содержит все DLL-файлы, включая библиотеки классов.

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

Любой, кто интересуется более подробными данными проекта, просто спросите. Я просто не буду публиковать все сразу.

EDIT:

После некоторого более тестирования мне удалось выяснить, что класс Installer не вызывается после. Я добавил что-то, что выписал бы файл, когда метод будет вызван, но ничего не произошло.

Поэтому мой вопрос заключается в следующем: как мне добавить проект Custom Action в проект установки?

ответ

1

Парадигма настроек не работает с классами установщика, потому что вы не находитесь в рабочем контексте приложения. Вы вызываетесь через отражение от процесса msiexec.exe, работающего с системной учетной записью, без какого-либо рабочего контекста каталога. Обычно люди используют обработку Xml непосредственно в файле настроек, чтобы обойти это поведение. Вам нужно указать полный путь к файлу настроек, потому что, опять же, вы выполняете обратный вызов из процесса msiexec.exe.

Пользовательское действие не обязательно должно быть настраиваемым действием Commit, потому что все пользовательские действия VS запускаются после установки всех файлов. Единственный раз, когда вам нужен пользовательский коммит - это действие, когда вы запускаете код, который имеет зависимость от файла, установленного в GAC на WinSxS, потому что они недоступны до момента фиксации.

+0

Итак, если я понял, что после фиксации найдите файл настроек и отредактируйте его напрямую? – Thodor12

+0

Я наткнулся на это: http://stackoverflow.com/questions/2943438/visual-studio-2008-installer-custom-action-breakpoint-not-firing. Это также верно для VS2015? Если это так, то я знаю, почему мой код не работает. – Thodor12

+0

Это не похоже на вашу проблему, потому что это относится к отладке и отсутствующей базе. Install(). – PhilDW

1

Вы можете добавить пользовательский класс действий (DLL) в проект установки. Вы должны добавить InstallerActions .dll к действиям Install and Commit.

enter image description here

Чтобы добавить настраиваемое действие

  1. Выберите Setup Installer проект в обозревателе решений. В меню в меню «Вид» выберите «Редактор», а затем «Пользовательские действия». Отобразится редактор настраиваемых действий .
  2. В редакторе пользовательских действий выберите узел Commit. В меню Действие нажмите Добавить пользовательское действие.
  3. В диалоговом окне «Выбор элемента в проекте» дважды щелкните папку приложений . Выберите Первичный выход от InstallerActions проект. Первичный вывод из InstallerActions отображается под узлом Commits в редакторе пользовательских действий.
  4. В окне «Свойства» убедитесь, что для свойства InstallerClass установлено значение «Истина» (это значение по умолчанию).
  5. В настраиваемых действиях редактор, выберите Установить узел и добавить Первичный выход из InstallerActions к этому узлу, как вы делали для Commit узла.
+0

Вы должны предоставить более подробную информацию в своем ответе, поскольку внешние ссылки могут прерываться со временем. –