Visual Studio Install Project: Получить целевой каталог - PullRequest
9 голосов
/ 19 февраля 2010

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

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

Но прежде чем я смогу решить, как устанавливать разрешения через .Net, мне нужно знать папку установки. Я использую проект установки, который имеет класс Installer, который также содержит элемент управления ServiceInstaller. Оба имеют свойство Context, поэтому я проверял его на наличие параметров, доступных при возникновении события AfterInstall для каждого из соответствующих установщиков. Сначала я подумал, что увижу набор свойств TargetDir, но это не так. Однако я вижу, что AssemblyPath установлено и указывает на исполняемый файл соответствующей папки.

По сути, я просто хочу убедиться, что это подходящий метод, который я должен использовать:

private void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
{
    string InstallPath = System.IO.Path.GetDirectoryName(serviceInstaller1.Context.Parameters["AssemblyPath"]);;
}

Ответы [ 7 ]

12 голосов
/ 20 сентября 2010

Я обнаружил, что решение, предложенное Бергом, работает для меня, за исключением использования этого значения для свойства CustomActionData:

/TargetDir="[TARGETDIR]\"

Обратите внимание на добавление обратной косой черты.Смотрите эту статью на MSDN .

3 голосов
/ 19 февраля 2010

Ваше настраиваемое действие является отложенным настраиваемым действием, и для него доступны только определенные свойства, для получения дополнительной информации см. Следующую страницу, http://msdn.microsoft.com/en-us/library/aa370543(VS.85).aspx. Возможно, вы сможете добавить свойство TARGETDIR к CustomActionData в Visual Studio 2008 ; Тем не менее, я не работал с Visual Studio 2008 в качестве инструмента разработки.

Выполнение сложных установок в Visual Studio 2008 очень сложно, поскольку в нем абстрагируются некоторые ключевые функции MSI. Я настоятельно рекомендую взглянуть на WiX.

Даже если вы не используете WiX, вам нужно скачать Orca, http://msdn.microsoft.com/en-us/library/aa370557(VS.85).aspx и использовать его для проверки вашей установки. Это сэкономит вам бесчисленные часы спустя.

2 голосов
/ 25 апреля 2012

Во время установки, событие, которое я сделал это:

// locate the installation directory and store it where we can find it during Commit
stateSaver.Add("TargetDir", Context.Parameters["DP_TargetDir"]);

, затем я смог получить доступ к TargetDir позже во время OnCommitted:

string path = (string)savedState["TargetDir"];

Не уверен, что этопомогает или нет!Я пытаюсь выяснить, как надежно определить каталог установки, чтобы моя служба могла выполнить некоторую регистрацию.

1 голос
/ 11 октября 2011

Для тех, кто имеет несколько, придется сделать так

/AppID="[APPID]" /Path="[TARGETDIR]\"
0 голосов
/ 07 июня 2010

Чтобы получить значение свойства целевого каталога в настраиваемом действии, вы можете переслать его вручную, выбрав вывод настраиваемого действия в представлении настраиваемого действия и указав в качестве значения для CustomActionData что-то вроде:

/TargetDir="[TARGETDIR]"

свойство.

После этого вы сможете получить к нему доступ:

string targetDir = Context.Parameters[ "TargetDir" ];
0 голосов
/ 26 марта 2010

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

0 голосов
/ 19 февраля 2010

В качестве альтернативы настройке проектов вы можете использовать некоторые сервисы сборки инсталлятора. Я думаю, с http://installer.codeeffects.com вы можете загружать любые файлы с вашего сайта и помещать их в каталог установки, когда пользователь устанавливает ваш сервис. Надеюсь, это поможет.

...