WIX: Windows Service Repair failing on lack of permissions + how to detecting repair mode?

旧城冷巷雨未停 提交于 2019-12-11 10:17:39

问题


Our WIX setup installs a windows service after asking logon account through a custom UI dialog.. The service starts after installation succeeds. Entire setup requires elevated privileges.

Hoping for any pointers regarding couple of questions:

Question 1 On attempting "Repair" from "Add/Remove Programs", UAC prompts for privilege elevation. After allowing so, the repair still fails with message:

"Service could not be installed. Verify that you have sufficient privileges to install system services".

Here's excerpt from code:

...

Privileged ...

  <Component Id="C_ServiceEXE" Guid="{105F9C86-BF07-43C8-8C78-DF30F012CD68}">
    <File Id="$(var.TargetFileName)" Name="$(var.TargetFileName)" KeyPath="yes"  Assembly=".net"
          AssemblyManifest="$(var.TargetFileName)" AssemblyApplication="$(var.TargetFileName)" DiskId="1"
          Source="$(var.TargetDir)\$(var.TargetFileName)" />

    <Condition>Privileged</Condition>

    <ServiceInstall Id="Id_ServiceInstall"
                     Name ="$(var.ServiceName)"
                     Description="$(var.ServiceDescription)"
                     DisplayName="$(var.ServiceName)"
                     Account="[SERVICEACCOUNT]"
                     Password="[SERVICEPASSWORD]"
                     Start="auto"
                     ErrorControl="normal"
                     Type="ownProcess"
                     Vital="yes"
                     Interactive="no"
                     />

    <ServiceControl Id="Id_ServiceControl"
                    Name ="$(var.ServiceName)"
                     Remove="uninstall"
                     Start="install"
                     Stop="both"
                     Wait="yes"
                    />

  </Component>

...

I not quite sure why this is happening, since I admin am on on my Win7 dev box and have marked both the setup and speicifically the service install component to be run in privileged mode.

I suspect I might be missing scheduling repair inside an AdminInstallExecute sequence but not quite sure if that will fix this.

Question 2 Also, related question is - if repair does succeed, would it again require user to enter logon account via the UI. I'd rather suppress all interactive UIs during repair or upgrade. I realize that UPGRADINGPRODUCTCODE to detect upgrade.

But how is repair detected ?

Appreciate any help or pointers.


回答1:


Maintenance mode most likely fails because your service user account doesn't have the right to log on as a service. It doesn't matter if you are an Administrator, you cannot install services for an user without giving him the log on right.

If setting this policy works, you also need to do it dynamically during install. A solution is to use ntrights.exe as a custom action. This custom action can use your custom properties which contains the user account information.

To detect a repair process, you can check the REINSTALL property value.



来源:https://stackoverflow.com/questions/6618544/wix-windows-service-repair-failing-on-lack-of-permissions-how-to-detecting-re

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!