Для 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 он должен быть доступен для использования до конца процесса установки.