System.IO.FileInfo добавляет неожиданную строку в путь при использовании в настраиваемом действии WIX - PullRequest
2 голосов
/ 01 апреля 2019

У меня есть установщик WIX (V3.11.1) , в котором я создаю FileInfo на основе значения, которое передается в пользовательское действие. Значение, которое было передано пользовательскому действию, является правильным, session.CustomActionData["INSTALLFOLDER"] возвращает правильный путь, который является C:\Program Files(x86)\MyApplication.

К сожалению, когда я создаю FileInfo targetDir = new FileInfo(session.CustomActionData["INSTALLFOLDER"]), результат targetDir.FullName равен C:\Windows\Installer\MSIE335.tmp-\C:\Program Files(x86)\MyApplication\.

Я пытался найти любую информацию о том, как работает конструктор FileInfo , но безрезультатно. У вас есть идеи, почему C:\Windows\Installer\MSIE335.tmp-\ появляется в FileInfo и как его создать с реальным путем?

Код, который я использую для проверки всех значений:

string path = session.CustomActionData["INSTALLFOLDER"];

session.Log(path); //result is C:\Program Files(x86)\MyApplication
FileInfo targetDir = new FileInfo(path);

session.Log(targetDir.FullName); // result is C:\Windows\Installer\MSIE335.tmp-\C:\Program Files(x86)\MyApplication\

1 Ответ

3 голосов
/ 01 апреля 2019

Мой смысл установки предполагает, что значение INSTALLFOLDER в вашем CustomActionData на самом деле является значением [INSTALLFOLDER].При регистрации этот синтаксис будет преобразован в правильное значение.Вот почему это выглядит хорошо.Однако то, что на самом деле получает FileInfo, это значение типа:

FileInfo targetDir = new FileInfo("[INSTALLFOLDER]");

Что, конечно, означает «Файл с именем« [INSTALLFOLDER] »в текущем каталоге».Это соответствует вашей второй строке журнала.

Исправление будет состоять в том, чтобы вы передавали значение INSTALLFOLDER в CustomActionData.Несколько разных способов сделать это в зависимости от того, как вы планируете отложенное настраиваемое действие и устанавливаете именованное свойство.Например, использование SetProperty должно быть простым способом исправить это.

Обновление: Hawex предоставил фрагмент, который определил пользовательское действие.Это выглядело так:

<Property Id="CustomActionOnInstall" Value="INSTALLFOLDER=[INSTALLFOLDER]" />

<CustomAction Id="CustomActionOnInstall" BinaryKey="CustomActions" Execute="deferred" 
              Impersonate="no"  DllEntry="OnInstall" Return="check" />
<InstallExecuteSequence>
  <Custom Action="CustomActionOnInstall" Before="InstallFinalize">NOT Installed</Custom>      
</InstallExecuteSequence>

чтобы исправить, просто измените статический (без оценки) Property на SetProperty, например так:

<SetProperty Id="CustomActionOnInstall" Value="INSTALLFOLDER=[INSTALLFOLDER]"
             Before="CustomActionOnInstall" Sequence="execute" />
...