WiX: Передача Установки соединяет каналом к управляемому пользовательскому действию

DLLs (динамически подключаемые библиотеки) и SLs (совместно использованные библиотеки, эквивалентные под UNIX), являются просто библиотеками исполняемого кода, который может быть динамично связан в исполняемый файл во время загрузки.

библиотеки Static введены в исполняемый файл во время компиляции и фиксируются от той точки. Они увеличивают размер исполняемого файла и не могут быть совместно использованы.

библиотеки Dynamic имеют следующие преимущества:

1/Они загружаются во время выполнения, а не время компиляции, таким образом, они могут быть обновлены независимо от исполняемого файла (все те необычные окна и диалоговые окна, которые Вы видите в Windows, прибывшем от DLLs, таким образом, стиль Вашего приложения может измениться без Вас имеющий необходимость переписать его).

2/, поскольку они независимы, код, может быть совместно использован через несколько исполняемых файлов - это сохраняет память с тех пор при выполнении 100 приложений с единственным DLL может только быть одна копия DLL в памяти.

Их основной недостаток является преимуществом № 1 - имеющий изменение DLLs, независимое, Ваше приложение может заставить Ваше приложение прекращать работать или начинать вести себя причудливым способом. Управление версиями DLL имеет тенденцию не быть организованным очень хорошо в соответствии с Windows, и это приводит к странно названному "Ад DLL".

10
задан Daniel 1 December 2009 в 09:01
поделиться

4 ответа

Пробовали ли вы запрашивать свойство INSTALLLOCATION непосредственно из управляемого центра сертификации?

string cad = session["INSTALLLOCATION"];

Одно из преимуществ использования DTF заключается в том, что у вас есть доступ для чтения / записи ко всем свойствам MSI без использования командных строк и т. Д. даже если INSTALLLOCATION не может быть запрошен как обычное свойство, вы можете определить собственное свойство MSI, установив для него значение INSTALLOCATION, и вместо этого запросить его внутри вашего CA.

0
ответ дан 3 December 2019 в 15:35
поделиться

Ваша передача значения корректна, но попробуйте ссылаться на него.

        string[] keys = new string[session.CustomActionData.Keys.Count];
        session.CustomActionData.Keys.CopyTo(keys, 0);
        string cad = keys[0];

Это должно установить cad в путь установки так, как вы хотите.

.
2
ответ дан 3 December 2019 в 15:35
поделиться

Если вы разметите свои данные как ...

<CustomAction Id="MyCustomActionData" Return="check" Property="MyCustomAction" Value='PROPERTY0=[PROPERTY0];PROPERTY1=[PROPERTY1];PROPERTY2=[PROPERTY2]' Execute='immediate' />

Вы можете получить доступ к таким данным, как:

string property0 = session.CustomActionData["Property0"];
string property1 = session.CustomActionData["Property1"];
string property2 = session.CustomActionData["Property2"];

В предыдущем примере вы использовали бы:

<CustomAction Id="RegisterDflHelp.SetProperty" Return="check" Property="RegisterDflHelp" Value='INSTALLLOCATION=[INSTALLLOCATION]' Execute='immediate' />

затем

string cad = session.CustomActionData["INSTALLLOCATION"];
18
ответ дан 3 December 2019 в 15:35
поделиться

Я сделал это, используя следующее в . WXS file:

<Directory Id="TARGETDIR" Name="SourceDir">
 <Directory Id="ProgramFilesFolder" Name="PFiles">
  <Directory Id="ManufacturerDir" Name="Company" ShortName="Company">
   <Directory Id="INSTALLDIR" Name="TheApp">
    <Directory Id="BatchFileLocation" Name="BatchFiles">
     <Component Id="BatchFilesComp" ... >
      <File Id="SomeFile_BAT" Source="BatchFiles\SomeFile.bat" Name="SomeFile.bat" ... />
     </Component>
    </Directory>
   </Directory>
  </Directory>
 </Directory>
</Directory>

И в пользовательском Action:

var batchDirectory = session.GetTargetPath("BatchFileLocation");
var batchFile = batchDirectory + "SomeFile.bat"

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

6
ответ дан 3 December 2019 в 15:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: