У меня есть следующий код Wix, который должен отправить значение свойства в Custom Action, написанное на C#. В основном, что я хочу, когда MSI установлен, я хочу написать путь к папке, где Wix установил программу в текстовый файл. Я ссылался на сайт this и создал соответствующий код, но мое пользовательское действие не работает.Wix Custom Action Реализация для написания Installfolder в тексте
Ниже мой Wix Файл:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*" Name="SetupInstallFolder" Language="1033" Version="1.0.0.0" Manufacturer="LP" UpgradeCode="9e10a7d8-4ffb-493c-8318-c44ba4bc0c4c">
<Package InstallerVersion="200" Compressed="no" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="SetupInstallFolder" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="SetupInstallFolder" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="SomeRandomEXE">
<File Source ="G:\SarVaGYa\myworkspace\LatestLpa\lpa\lpa_c\here\src\lpa\Release\lpa.exe" />
</Component>
</ComponentGroup>
<Binary Id="SetupCA2" src="G:\visual studio stuffs\SetupCAInstallFolder\SetupCAInstallFolder\bin\Release\SetupCAInstallFolder.CA.dll"/>
<CustomAction Id="INSTALLFOLDERFINDER" Execute="immediate" Property="INSTALLEDPATH" Value="[INSTALLFOLDER]" />
<InstallExecuteSequence>
<Custom Action="INSTALLFOLDERFINDER" Sequence="2"></Custom>
</InstallExecuteSequence>
</Fragment>
</Wix>
Я также дал мой C# код, который должен получить значение и записать его в файл:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Deployment.WindowsInstaller;
namespace SetupCAInstallFolder
{
public class CustomActions
{
[CustomAction]
public static ActionResult InstallFolderFinder(Session session)
{
session.Log("Here is the SetupCAInstallFolder");
string path = session["INSTALLEDPATH"];
session.Log("Installed Path is " + path);
System.IO.File.WriteAllText("F:\\pathgenerated.txt", path);
//System.IO.File.WriteAllText(path + "installed.txt", "sdkasdkasdlkasdk");
return ActionResult.Success;
}
}
}
Файл Wix компилирует и дает MSI, который не получает значение INSTALLEDPATH. Если я добавлю DllEntry = "InstallFolderFinder" в тег CustomAction, он не с ошибкой Атрибут CustomAction/@ DllEntry не может сосуществовать с ранее указанным атрибутом этого элемента. Элемент CustomAction может иметь только один из следующих целевых атрибутов, указанных в то время: DllEntry, Error, ExeCommand, JScriptCall, Script, значение или VBScriptCall
Как передать значение INSTALLEDPATH на C# пользовательских действий?
Интересно - мне нравится это решение, и я не думал использовать другое настраиваемое действие для установки значения на основе значения пользовательского интерфейса. Ницца. – Joe
Смотрите мой комментарий для моего ответа.Это хороший рабочий пример для отложенных пользовательских действий (если кому-то нужны отложенные ЦС). – Philm