В VS2008 я написал службу C#, установщик и создал установочный пакет для ее установки. Службе необходимо загрузить XML-файл для работы. Где лучше всего разместить этот файл в различных папках файловой системы, предлагаемых проектом установки VS, и как мне тогда ссылаться на эти пути из моего кода?
Спасибо
[Я должен указать, что служба работает как LocalService, что означает, что папка данных приложения, предлагаемая элементом «Папка данных приложения пользователя» в проекте установки VS, недоступна, даже если во время установки используется «Установить для всех пользователей». Я мог бы легко обойти это, но хотел бы понять передовой опыт]





Я не уверен, в каком месте лучше хранить XML-файл. Я не думаю, что это будет иметь большое значение. Но если вам нужно получить специальный путь к папке в системе, вы можете использовать для этого класс Environment. Следующая строка кода получает путь к программным файлам:
string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
Ищете папку, в которой установлен myapp? Как насчет того, чтобы просто заглянуть в каталог, в котором находится ваша сборка? Т.е. Assembly.GetExecutingAssembly (). Местоположение?
Вы всегда можете воспользоваться реестром.
Чтобы прочитать путь установки, используемый установщиком, созданным из проекта установки:
1) Откройте редактор «Настраиваемые действия» в своем проекте установки.
2) Добавьте настраиваемое действие из вашей сборки, в которой находится ваш класс установщика (если вы еще этого не сделали)
3) Выберите это настраиваемое действие и добавьте /myKey = "[TARGETDIR]\" в CustomActionData в сетке свойств.
4) В своем классе установщика вы можете получить доступ к своему значению следующим образом: Context.Parameters["myKey"] в переопределении вашего метода в зависимости от вашего выбора на шаге 2
Это очень старый вопрос, но поскольку я не согласен с принятым ответом, по крайней мере, если XML-файл будет обновлен программой, я все равно отправлю его.
Что я делаю при установке программы серверного типа (службы Windows или другой программы, не связанной с пользователем), так это устанавливаю файл настроек XML по умолчанию или шаблон XML в Program Files вместе с программой. Но я никогда не пытаюсь писать в этот файл - обычно это не разрешено.
Вместо этого во время инициализации программы я проверяю, был ли файл ранее скопирован в подпапку, которую я создаю в C: \ ProgramData, то есть «C: \ ProgramData \ myCompanyName \ myProgramName \ mySettingsFile.xml». (Найдите C: \ ProgramData с помощью Environment.SpecialFolder.CommonApplicationData - см. Здесь: http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx). Если файл настроек XML уже существует, я просто открываю его и использую - он доступен для записи. Если он не существует, я создаю подпапки, если это необходимо, и копирую XML-файл настроек шаблона из Program Files - это должна быть одноразовая операция, которая выполняется только при первом запуске программы после установки.
См. Здесь для получения дополнительной информации: Как разработчику, как мне использовать специальные папки в Windows Vista (и Windows 7)?
Хорошо, простой пример. Установщик создает папку% program files% \ mycompany \ myapp, но это может быть изменено, если лицо, выполняющее установку, изменит путь установки. Так, например, как я могу попасть в папку установки? Код в этом примере идет только до ProgramFiles.