Получение свойства SourceDir из пользовательского действия C#

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

Может ли кто-нибудь посоветовать или указать мне что-нибудь, кроме бесполезного сайта Microsoft?


person Community    schedule 11.11.2008    source источник
comment
Было бы полезно упомянуть, что вы используете для сборки установщиков, WIX, NULLSoft, InstallShield и т. д.   -  person CheGueVerra    schedule 11.11.2008
comment
Также было бы полезно указать, является ли ваше пользовательское действие отложенным или немедленным.   -  person LanceSc    schedule 11.11.2008


Ответы (3)


Я предполагаю, что вы используете vbscript для пользовательского действия. Если это так, доступ к свойствам можно получить через объект Session. Смотри ниже:

strSourceDir = Session.Property("SourceDir")

Имейте в виду, что свойство SourceDir доступно только в определенное время в течение установка.

person w4g3n3r    schedule 11.11.2008

Для C# вы обнаружите, что можете сделать что-то вроде этого:

[CustomAction]
public static ActionResult MyCustomAction(Session session)
{
    string sourceDir = session["SourceDir"];
    string path = Path.Combine(sourceDir, "yourfilename.txt");
    ...

В документации на MSDN, к сожалению, этого недостаточно.

Как упоминает w4g3n3r в своем ответе, SourceDir доступен вам только в определенное время. Короче говоря, вам нужно убедиться, что ваше пользовательское действие вызывается после вызова действия ResolveSource, которое может быть вызвано только после запуска CostInitialize.

После установки SourceDir он должен быть доступен для использования в оставшейся части процесса установки.

person Chris    schedule 17.06.2009

Вы используете InstallShield? Вот пример ЦС InstallScript:

MsiGetProperty(hMSI, "CustomActionData", strDirectory, numBuffer);

... где вы также использовали настраиваемое действие Set Property «Type 51», чтобы настроить CustomActionData для вашей функции на значение SOURCEDIR.

person William Leara    schedule 17.06.2009