我正在尝试使用WiX创建用于窗口服务的安装程序,我尝试了所有找到的答案,但没有尝试。由于权限不足,使用WiX创建的安装程序仍然无法安装,权限不足...这是我的代码...
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'><?define G_TargetDir=$(var.G.TargetDir)?>
<Product Id="*" Name="G.Installer" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="PUT-GUID-HERE">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />
<Feature Id="ProductFeature" Title="G.Installer" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
</Product>
<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="G.Installer" />
</Directory>
</Directory>
</Fragment>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="G.exe" Guid="*">
<File Id="G.exe" Name="G.exe" Source="$(var.G_TargetDir)G.exe" Vital="yes" KeyPath="yes" />
<ServiceInstall Id="G.exe" Type="ownProcess" Vital="yes" Name="G.exe" DisplayName="G" Description="Description" Start="auto" Account="LocalSystem" ErrorControl="critical" Arguments="-start" Interactive="yes">
<util:PermissionEx User="Everyone" ServicePauseContinue="yes" ServiceQueryStatus="yes" ServiceStart="yes" ServiceStop="yes" ServiceUserDefinedControl="yes" />
</ServiceInstall>
<ServiceControl Id="G.exe" Stop="both" Start="install" Remove="uninstall" Name="G.exe" Wait="no"/>
</Component>
<Component Id="G.exe.config" Guid="*">
<File Id="G.exe.config" Name="G.exe.config" Source="$(var.G_TargetDir)G.exe.config" />
</Component>
<Component Id="MongoDB.Bson.dll" Guid="*">
<File Id="MongoDB.Bson.dll" Name="MongoDB.Bson.dll" Source="$(var.G_TargetDir)MongoDB.Bson.dll" />
</Component>
<Component Id="System.Buffers.dll" Guid="*">
<File Id="System.Buffers.dll" Name="System.Buffers.dll" Source="$(var.G_TargetDir)System.Buffers.dll" />
</Component>
<Component Id="DnsClient.dll" Guid="*">
<File Id="DnsClient.dll" Name="DnsClient.dll" Source="$(var.G_TargetDir)DnsClient.dll" />
</Component>
<Component Id="System.Runtime.InteropServices.RuntimeInformation.dll" Guid="*">
<File Id="System.Runtime.InteropServices.RuntimeInformation.dll" Name="System.Runtime.InteropServices.RuntimeInformation.dll" Source="$(var.G_TargetDir)System.Runtime.InteropServices.RuntimeInformation.dll" />
</Component>
<Component Id="MongoDB.Driver.Core.dll" Guid="*">
<File Id="MongoDB.Driver.Core.dll" Name="MongoDB.Driver.Core.dll" Source="$(var.G_TargetDir)MongoDB.Driver.Core.dll" />
</Component>
<Component Id="MongoDB.Driver.dll" Guid="*">
<File Id="MongoDB.Driver.dll" Name="MongoDB.Driver.dll" Source="$(var.G_TargetDir)MongoDB.Driver.dll" />
</Component>
</ComponentGroup>
</Fragment>
</Wix>
答案 0 :(得分:1)
InstallPrivileges :尝试其他操作之前,请先设置 从Package element中的
InstallPrivileges attribute
到"elevated"
?只是为了确保-我认为默认是提升(一旦InstallScope至少是perMachine吗?)。
正在编译? :目前还不清楚会发生什么。 WiX项目是否无法编译?看起来很奇怪的第一件事是您没有制造商值-也许您在发布之前将其删除了?据我所知,除非Manufacturer
具有值,否则WiX 3将拒绝编译。如果缺少,请添加它。
<Product Id="*" Name="G.Installer" Language="1033" Version="1.0.0.0"
Manufacturer="YOURCOMPANYNAMEHERE" UpgradeCode="PUT-GUID-HERE">
安装程序行为 :如果安装程序可以编译,运行时是否会开始安装,但无法完成?还是完成并且服务无法启动?您是否使用管理员帐户进行安装并在启动安装时收到UAC提示?
日志记录 :我们需要更多信息,如果安装失败,则应启用MSI日志记录以查看发生了什么。首先,您检查系统的事件日志,然后在启用详细的MSI日志记录的同时运行安装程序。我想为所有MSI安装启用日志记录。性能影响不大,但是当您突然需要一个真正的日志文件时,始终可以使用。 You can enable logging for all MSI files as explained on installsite.org(部分:“ 计算机上所有设置的全局范围 ”)。安装后,MSI日志文件将仅位于您的%TEMP% folder
中。它们有一个随机的十六进制名称,您可以定期将它们全部冲洗掉,以免它们堆积。您可以按修改日期/时间进行排序,以查找最新创建的日期/时间。 Some logging and log-file interpretation hints can be found here。
建议 :
1
:我将尝试设置在虚拟机上手动运行服务所需的文件并将它们注册到 验证服务是否正常运行。2
:做一个完整的 重建WiX安装程序,删除所有临时文件和wixobj
文件。您的安装程序可能无法编译,但是 它与先前编译中已存在的wixobj
文件链接。 “高度惊讶”因素(与过时的文件链接)。
服务启动问题 :显而易见:如果服务无法启动,请启用其最大日志记录级别,并检查事件日志以及您执行的其他任何日志记录可能有。 Run dependency checking(Dependencies.exe
-重写Dependency Walker
)和check assembly binding。检查您的 config文件(硬编码错误值)中是否存在开发箱错误,等等...不需要告诉您,但这是my usual checklist(有人为之投票)出于某种原因,让我知道您可能在其中发现什么错误?我是一名部署专家,而不是编码员-它更像是一个“想法”列表,而不是真正的清单)。
源代码简化 :通常可以按以下说明简化WiX源文件:Syntax for guids in WIX?示例:
<Component Id="System.Runtime.InteropServices.RuntimeInformation.dll" Guid="{00000000-0000-0000-0000-000000000000}">
<File Id="System.Runtime.InteropServices.RuntimeInformation.dll" Name="System.Runtime.InteropServices.RuntimeInformation.dll" Source="$(var.G_TargetDir)System.Runtime.InteropServices.RuntimeInformation.dll" />
</Component>
vs
<Component>
<File Source="$(var.G_TargetDir)System.Runtime.InteropServices.RuntimeInformation.dll" />
</Component>