Можно ли установить значение файла конфигурации, чтобы отразить выбранный путь установщика Windows? - PullRequest
1 голос
/ 15 ноября 2011

У меня есть программа, которую я собираюсь развернуть через установщик Windows. Программа выводит файлы в каталог, указанный в файле app.config.

Можно ли изменить значение файла конфигурации на путь, выбранный во время установки?

Так что процесс будет следующим.

  1. Пользователь запускает установщик Windows
  2. Пользователь выбирает путь для установки программы
  3. Выходная переменная в app.config изменена на место установки
  4. Пользователь может затем отредактировать файл конфигурации, чтобы изменить выходную переменную, если он хочет изменить путь вывода.

Обновление: Хорошо, теперь я знаю, как создать пользовательский процесс установки по этой ссылке: Настройка параметров приложения App.config во время установки MSI

Это нормально, если вы хотите просто использовать стандартный набор элементов управления, но я бы хотел, чтобы средство выбора файлов им позволяло выбрать путь вывода, как я могу это сделать?

Хорошо, я понял, что мне нужно сделать ... Вот ответ ...

Добавьте класс установщика в проект, который вы хотите установить, в соответствии с инструкциями в ссылке.

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

public override void Install(System.Collections.IDictionary stateSaver)
        {

            base.Install(stateSaver);

            string targetDirectory = Context.Parameters["targetdir"];

            string exePath = string.Format("{0}BarcodeScanner.exe", targetDirectory);

            Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);

            config.AppSettings.Settings["ILPrintExportPath"].Value = targetDirectory;


            config.Save();

        }

Затем следуйте другим этапам в приведенной выше ссылке:)

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

Ответы [ 3 ]

2 голосов
/ 15 ноября 2011

См. Эту статью Настройка параметров приложения App.config во время установки MSI , в которой показано, как это сделать, используя настраиваемое действие C #, в котором для открытия и обновления app.config используется стандартный класс .Net ConfigurationManager.файл.

1 голос
/ 15 ноября 2011

Почему бы просто не использовать Assembly.Location , чтобы получить каталог, из которого запускается EXE?Я не вижу необходимости добавлять параметр конфигурации - это не значит, что вы хотите, чтобы пользователь мог настраивать его после установки приложения.

var exePath = Assembly.GetEntryAssembly().Location;
var exeDirectory = Path.GetDirectoryName(exePath);
0 голосов
/ 15 ноября 2011

Если вы хотите, чтобы этот путь по умолчанию совпадал с каталогом установки, вы можете просто использовать Directory.GetCurrentDirectory(), если в вашей конфигурации нет записи. Но тогда во время установки не будет возможности установить другой путь (не уверен, если вы этого хотите).

...