Я хочу передать каталог установки моим другим настраиваемым действиям. У меня есть собственность
<Property Id="CA1Action" Value="InstallDir=[INSTALLFOLDER]"/>
Тогда я определил CA в Wix
<CustomAction Id="CA1Action"
BinaryKey="InstallerActionsBinary"
DllEntry="CA1"
Execute="commit"
Return="check" />
Для завершения я называю свой CA как
<Custom Action="CA1Action" After="InstallFiles"></Custom>
При выполнении моего установщика с помощью MSIEXEC я получаю следующее сообщение об ошибке из своего пользовательского действия, которое пытается открыть файл из установки:
Не удалось найти файл 'C: \ Windows \ Installer \ MSICA8C.tmp- \ C: \ Program Files \ MyProgram \ web.config'.
Вот способ извлечения информации из сеанса:
public static ActionResult CA1(Session session_)
{
//Collect parameters from Session
CustomActionData data = session_.CustomActionData;
string path = data["InstallDir"];
}
Мой первый вопрос: почему к моему параметру добавлен кэш установщика? Чтобы еще больше добавить к моей путанице, когда я добавил
path = path.Substring("C:\Windows\Installer\MSICA8C.tmp-\".Length);
в мой ЦС для удаления "C: \ Windows \ Installer \ MSICA8C.tmp- \", я получаю исключение аргумента, говорящее мне, что начальное значение подстроки больше, чем длина моей строки .. Так что я добавил регистрируясь в моем ЦС, и вижу, что путь устанавливается на «[INSTALLFOLDER]», а не на значение свойства, но как это значение свойства, когда я использую его в пути для моего FileStream?
Я следил за ответами в этом посте: Как передать параметры в пользовательское действие?