我们有两种安装模式:服务和应用。
使用 Wix#,我找不到向用户展示这个简单的两个单选按钮对话框的方法:
Choose your installation:
(*) App [default]
( ) Service
然后选择相应地部署/执行哪些文件(和操作)。
我们甚至如何将用户的决定与实际操作绑定?
编辑:
我最终发现了如何做到这一点,但仍然无法使 GUI 选择影响部署的文件(尽管绑定的属性确实发生了变化)。这是新的更详细的问题:
我们有两种安装模式:服务和应用。
使用 Wix#,我找不到向用户展示这个简单的两个单选按钮对话框的方法:
Choose your installation:
(*) App [default]
( ) Service
然后选择相应地部署/执行哪些文件(和操作)。
我们甚至如何将用户的决定与实际操作绑定?
我最终发现了如何做到这一点,但仍然无法使 GUI 选择影响部署的文件(尽管绑定的属性确实发生了变化)。这是新的更详细的问题:
注意:我不使用 Wix#。
相同的可执行文件?: 可以肯定的是,这是可以作为应用程序和服务运行的相同可执行文件吗?(我实际上做了一个能够做到这一点的应用程序,但效果不太好)。
服务安装:作为服务的安装通常是通过内置的 MSI 结构完成的(我相信你已经知道了,这只是为了参考和完整性):
ServiceControl Element
( MSI table
) 和ServiceInstall Element
( MSI table
) - 如果使用得当,可以可靠地完成所有工作自定义操作:许多人使用自定义操作来安装服务。这通常是MSI 反模式(不必要、容易出错等)。我相信您仅在某些情况下需要自定义操作来安装服务 - 就像您建议的那样 - 除非您引用的二进制文件是两个不同的文件。自定义操作需要注册然后启动服务。您还必须设置服务的引导行为。
假设二进制文件是单个二进制文件而不是两个不同的二进制文件:
两个 MSI:编译两个 MSI 文件来完成两个不同的任务是否可以接受?您将有一个 MSI 来安装服务版本,而一个 MSI 来安装应用程序版本?安装一个或另一个,确保安装目标不同(因此 MSI 引用计数不会干扰 - 这也允许同时安装 MSI)。您可以使用 setup.exe 包来安装其中一个吗?
Full Monty:我想你可以同时安装两份二进制文件,并将一份注册为服务。那么你需要询问用户是否启动服务?这将是一个自定义操作来设置服务是在启动时自动启动还是手动启动或立即启动等等......?或者,您是否可以始终注册并作为服务运行,并允许应用程序也以交互方式运行?穿线?
安装方式
您可以通过功能来实现。功能具有固定文件列表,在 MSI 构建之前格式化。如果您添加服务和应用程序功能,您可以控制要在目标文件夹中添加的文件。
默认情况下,您的文件位于完整功能名称中,因此您需要添加其他文件。这是功能示例:
请添加您的并使用 ADDLOCAL 参数设置要部署的内容。只需将其设置为单选按钮单击:
session["ADDLOCAL"]="Feature1,Feature2,"
警告:当您进行更新时,您需要设置以前的功能名称。
图形界面安装流程
如果我需要使一些拆分的表单流动,我只需在行中添加 2 个我的对话框序列,并为 ManagedForm 使用我的 JumpTo 方法:
/// <summary>
/// Переход к форме определенного типа.
/// </summary>
/// <param name="dialogType">Тип формы.</param>
public bool JumpTo(Type dialogType)
{
int index = Shell.Dialogs.IndexOf(dialogType);
if (index < 0)
{
return false;
}
BeginInvoke(new Action(() => Shell.GoTo(index)));
return true;
}
之后,我需要控制第一个和最后一个表单的行为以跳转到正确的对话框。