C# 在C:分区而不是程序文件文件夹中安装WIX安装程序应用程序

C# 在C:分区而不是程序文件文件夹中安装WIX安装程序应用程序,c#,visual-studio-2010,visual-studio,wix,C#,Visual Studio 2010,Visual Studio,Wix,我在VS2010中使用WIX创建了一个安装程序。当前,当我安装应用程序时,它正在C:\Program files\Wixdemoapplication下安装应用程序和与应用程序相关的依赖项文件。我需要自定义它。我需要直接在C:\Wixdemoapplication下的Wixdemoapplication下安装应用程序,而不是在C:\Program Files\Wixdemoapplication下安装 我需要帮助 试试这个未经测试的方法;但可能足以满足您的需要: <Directory Id

我在VS2010中使用WIX创建了一个安装程序。当前,当我安装应用程序时,它正在C:\Program files\Wixdemoapplication下安装应用程序和与应用程序相关的依赖项文件。我需要自定义它。我需要直接在C:\Wixdemoapplication下的Wixdemoapplication下安装应用程序,而不是在C:\Program Files\Wixdemoapplication下安装


我需要帮助

试试这个未经测试的方法;但可能足以满足您的需要:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="INSTALLFOLDER" Name="Wixdemoapplication" />
</Directory>

将程序的元素嵌套在。

下,需要将INSTALLFOLDER属性设置为要安装的位置。应避免使用TARGETDIR,因为它是变量。当MSI内置目录选择时,不需要自定义操作。
<CustomAction Id="SpawnBrowseFolderDialog" BinaryKey="CustomActions" DllEntry="SpawnBrowseFolderDialog" Return="check" />
<Control Id="BrowseButton" Type="PushButton" X="276" Y="126" Width="90" Height="18" Text="{\VSI_MS_Sans_Serif13.0_0_0}B&amp;rowse..." TabSkip="no">
    <Publish Event="DoAction" Value="SpawnBrowseFolderDialog"><![CDATA[1]]></Publish>
    <Publish Property="INSTALLFOLDER" Value="[INSTALLFOLDER]"><![CDATA[1]]></Publish>
</Control>
[CustomAction]
public static ActionResult SpawnBrowseFolderDialog(Session session)
{
    session.Log("Started the SpawnBrowseFolderDialog custom action.");
    try
    {
        Thread worker = new Thread(() =>
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            dialog.Description = "Please select an installation directory to house core files and components.";
            dialog.SelectedPath = session["INSTALLFOLDER"];
            DialogResult result = dialog.ShowDialog();
            session["INSTALLFOLDER"] = dialog.SelectedPath;
        });
        worker.SetApartmentState(ApartmentState.STA);
        worker.Start();
        worker.Join();
    }
    catch (Exception exception)
    {
        session.Log("Exception while trying to spawn the browse folder dialog. {0}", exception.ToString());
    }
    session.Log("Finished the SpawnBrowseFolderDialog custom action.");
    return ActionResult.Success;
}