繁体   English   中英

无法使用WiX安装程序进行设置

[英]Unable to setup with WiX Installer

我使用WiX安装程序为C#应用程序创建了安装程序。

我使用CustomAction类安装SQL数据库并设置文件夹的权限。

有我的课:

public class CustomActions
{
    [CustomAction]
    public static ActionResult AllowAppData(Session session){...}

    [CustomAction]
    public static ActionResult Install_SetupDataBase(Session session){...}
}

和product.wxs:

<Binary Id="CASetup.dll" SourceFile="$(var.SetupCustomAction.TargetDir)$(var.SetupCustomAction.TargetName).CA.dll" />
<CustomAction Id="CustomActionSetupAllow" BinaryKey="CASetup.dll" DllEntry="AllowAppData" Execute="immediate" />
<CustomAction Id="CustomActionSetupBase" BinaryKey="CASetup.dll" DllEntry="Install_SetupDataBase" Execute="immediate" />

<InstallExecuteSequence>
  <Custom Action='CustomActionSetupAllow' After='InstallFinalize' />
  <Custom Action='CustomActionSetupBase' After='InstallFinalize' />
</InstallExecuteSequence>

构建正常,但是当执行安装时,我收到消息:

在此处输入图片说明

我尝试仅使用CustomActionSetupAllow ,而且效果很好。 但是有了CustomActionSetupBase我得到了消息。

我怎么知道缺少什么DLL? 我应该在哪里添加参考?

错误“无法运行”并不意味着它已丢失。 它位于MSI文件的Binary表中,并将被流式传输到磁盘上以运行。 该错误意味着它无法加载和运行,或者正在崩溃。 有可能缺少依赖的Dll。

一个潜在的严重问题是您已将自定义操作(CA)标记为立即执行。 这意味着它可以在安装任何东西之前运行,例如您可能正在填充的空数据库,以及它可能需要的任何依赖的Dll。 除此之外,如果您使用直接CA创建SQL DB,并且安装随后失败,那么您将拥有一个DB但没有安装产品。 这应该是一个延迟的自定义操作,最好是使用回滚CA来删除该数据库,以便用户可以再次运行安装,而不必再填充同一数据库(如果有问题)。

您可能还需要查看其他领域。 即时CA使用安装用户的凭据而不是提升的身份运行,因此,如果代码需要提升,它将失败。 延迟的CA将随系统帐户一起运行,因此使用系统帐户访问SQL DB可能是一个问题。 CA中的代码必须具有很高的防御性,因为它与交互式测试的环境不同。 由于这些原因,通常最好使用在应用程序首次运行时在真正的交互式环境中运行的启动程序来执行此操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM