2010-04-30 3 views
5

У меня есть .NET-решение с проектом-установщиком, который создает MSI. Один из проектов, установленных MSI, содержит файл App.Config. Похоже, что значения этого файла конфигурации встроены в MSI во время компиляции. Есть ли способ переопределить их во время выполнения?Переопределить параметры app.config, встроенные в MSI?

Например, App.Config Я работаю с настройками URL-адреса веб-службы, с которой разговаривает установщик. Можно ли переопределить этот URL во время выполнения, чтобы мне не пришлось перекомпилировать MSI, если URL-адрес изменился?

Update: Я думаю, что я спрашиваю, могу ли я скопировать файл app.config, с определенным именем, в мой каталог инсталлятора таким образом, что он будет перекрывать, во время выполнения, настройки встроенных в MSI ?

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

ответ

1

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

В нашем случае многие из этих параметров попадают в файл app.config, который не рекомендуется пытаться манипулировать извне самого приложения. Это можно сделать, но это опасно несколькими тонкими способами. Если бы это было не так, лучшим вариантом было бы, вероятно, добавить «настраиваемое действие» для проекта установки, в который будут вводиться данные в файл, базу данных или что-то еще, что мы использовали для хранения наших настроек. Отправную точку для этого можно найти in MSDN.

Но поскольку это не было вариантом, мы решили, что, возможно, самый простой способ получить данные через установку в приложение, не встраивая его в установочный пакет, - это использовать файл «проехать». Это файл, о котором знает ваша установка, но который не встроен в .MSI. Он должен просто находиться в известном месте по сравнению с .MSI при установке. Вы сообщаете проекту установки, что это за файл, где он должен быть, и куда его поместить. Тогда ваше приложение может проверить его существование при запуске и обработать все, что там обнаружит. В вашем случае это будет переопределение URL-адреса. Затем приложение может удалить файл, поэтому он не загружается при каждом запуске.

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

  • Состояние: НЕ ПЕРЕУСТАНОВИТЕ
  • PacakgeAs: vsdpaLoose
  • Vital: Ложные

Мы называем наш файл AutoImport.Settings.xml. Это пользовательский XML-файл, который хранит любые данные, которые мы хотим, чтобы инициализировать наше приложение, когда оно установлено. Он следует тому же формату, который мы используем, когда мы вручную экспортируем/импортируем конфигурации из приложения во время выполнения и использует тот же механизм. Он просто делает это автоматически при запуске, если он находит файл там. Это позволяет нам сконфигурировать один «прототип» машины со всеми настройками сети, которые мы хотим, чтобы экспортировать эти параметры, а затем отправить этот файл импорта для автоматической загрузки с любыми другими установками, которые мы делаем в этой сетевой среде.

Как я уже сказал, похоже, что должен быть «лучший» способ. Единственные, которые мы могли бы придумать, означали выход из механизмов app.config и user.config, которые имеют свои преимущества. Поэтому, в конце концов, мы решили, что это альтернатива с низким коэффициентом трения, которая полностью удовлетворяет наши потребности.

+0

Спасибо за предложения. Это приложение устанавливается с помощью CD, поэтому добавление или изменение файла для проезда может быть затруднено, поэтому я считаю, что лучше всего подходит для моих нужд, это изменить код установки, чтобы проверить известный раздел реестра по умолчанию. Моя главная цель заключалась в том, чтобы узнать, будет ли MSI автоматически искать файл с определенным именем файла, и похоже, что вы говорите «нет, вам нужно бросить это самостоятельно». Не тот ответ, который я хотел, но ответ тем не менее :) –

0

Если вам нужно, чтобы установщик разговаривал с веб-службой, где вы собираетесь хранить URL-адрес, если не в самом инсталляторе?

Если у вас есть известное место для поиска URL-адреса («постоянный» URL-адрес, база данных, общий доступ к файлам и т. Д.), Вы можете указать его адрес в программе установки. В противном случае просто нет места, чтобы получить URL-адрес от ...

0

Если вы раскрываете url как общедоступное свойство (то есть любое свойство в таблице Proeprties, которая находится все в столицах, считается общедоступной - я не знаю, если у вас есть этот уровень управления в проекте установщика в VS), то вы можете установить его из командной строки при запуске MSI. Это не очень хорошее долгосрочное решение для вашей конкретной проблемы, хотя, может быть, лучше понять первоначальное подключение к известному адресу, который не изменится, и он может вернуть текущий адрес реального веб-сервиса, который вы хотите говорить с.

+0

Указанный URL-адрес _is_ «известный адрес, который не будет изменен», где программа установки загружает другие данные конфигурации. Проблема в том, что этот URL-адрес действительно изменился :) –

+0

Тогда вы можете быть в точке, где вам нужно укусить пулю и перестроить MSI (если предположить, что на сервере хостинга невозможно выполнить какую-либо автоматическую переадресацию оригинальный веб-сервис). – slugster

Смежные вопросы