1

这是我的.wxs文件

特别是我设法以 LocalSystem 用户的身份安装了一项服务,并启动了它:

        <!-- Directory where [prey]/versions/[version] will be -->
    <Directory Id="ProgramFilesFolder">
      <Directory Id="INSTALLLOCATION" Name="Prey">
        <Directory Id="VersionsDir" Name="versions">
          <Directory Id="VersionDir" Name="$(var.ProductVersion)">
            <Directory Id="BinDir" Name="bin">
              <Directory Id="BinWindowsDir" Name="windows">
                <Component Id="CronServiceExe"
                           Guid="ECC25B2A-FB2E-425A-92AD-DCF1D34204FF">
                  <File Id="file_8FF048AD40124B9F9C07126F2C14A765"
                        Checksum="yes"
                        KeyPath="yes"
                        Source="source-msi\versions\0.10.0\bin\windows\cronsvc.exe" />
                  <ServiceInstall Id="CronServiceInstaller"
                                  Type="ownProcess"
                                  Vital="yes"
                                  Name="CronService"
                                  DisplayName="Cron Service"
                                  Start="auto"
                                  Account="LocalSystem"
                                  ErrorControl="normal"
                                  Interactive="no">
                  </ServiceInstall>
                  <ServiceControl Id="StartService"
                                  Start="install"
                                  Stop="both"
                                  Remove="uninstall"
                                  Name="CronService"
                                  Wait="yes" />
                </Component>
                <Component Id="CronServiceDll"
                           Guid="75C4129B-C28A-45A8-9F06-CB496259FE7F">
                  <File Id="file_11D016207EA34826A20A52524A3A82BC"
                        Checksum="yes"
                        KeyPath="yes"
                        Source="source-msi\versions\0.10.0\bin\windows\Cronsvclib.dll" />
                </Component>
              </Directory>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>

它运行良好。一切都很好,除非我要卸载产品。因为尽管在 UAC 对话框中询问我(屏幕截图),但安装程序坚持认为我无权停止服务。

这是Error 的屏幕截图,上面写着:

Service 'Cron Service' (CronService) could not be stopped. Verify that you have sufficient privileges to stop system services.

而且,这是特定的日志(我正在卸载/L*v以获取详细日志的选项)。您可以在此 gist中获取完整文件。

2220 - 2226 行

MSI (s) (90:80) [19:11:54:953]: Note: 1: 2205 2:  3: Icon 
MSI (s) (90:80) [19:11:54:953]: Note: 1: 2205 2:  3: TypeLib 
MSI (s) (90:80) [19:11:54:953]: Note: 1: 2727 2:  
MSI (s) (90:80) [19:11:54:973]: RESTART MANAGER: Detected that the service CronService will be stopped due to a service control action authored in the package before the files are updated. So, we will not attempt to stop this service using Restart Manager
MSI (s) (90:80) [19:11:54:973]: Note: 1: 2727 2:  
MSI (s) (90:80) [19:11:54:973]: Doing action: InstallInitialize
MSI (s) (90:80) [19:11:54:973]: Note: 1: 2205 2:  3: ActionText 
Action ended 19:11:54: InstallValidate. Return value 1.

4624 - 4635 行

MSI (s) (90:80) [19:11:57:196]: Executing op: ActionStart(Name=StopServices,Description=Stopping services,Template=Service: [1])
MSI (s) (90:80) [19:11:57:196]: Executing op: ProgressTotal(Total=1,Type=1,ByteEquivalent=1300000)
MSI (s) (90:80) [19:11:57:196]: Executing op: ServiceControl(,Name=CronService,Action=2,Wait=1,)
MSI (s) (90:80) [19:12:27:239]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:12:27:239]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1921 
MSI (s) (90:80) [19:16:38:940]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:16:38:940]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709 
MSI (s) (90:80) [19:16:38:940]: Product: Prey Anti-theft -- Error 1921. Service 'Cron Service' (CronService) could not be stopped.  Verify that you have sufficient privileges to stop system services.
MSI (s) (90:80) [19:17:08:983]: Note: 1: 2205 2:  3: Error 
MSI (s) (90:80) [19:17:08:983]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1921 
MSI (c) (48:84) [19:12:27:239]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

鉴于所有这些信息。我推断在某个地方我必须设法以管理员身份启动我的MSI。或不?

那是我的问题:

  1. 有没有办法将我的 .msi 安装程序设置为“仅限管理员”?(如果确实存在该选择)。

  2. 奇怪的是,我得到的所有帖子和谷歌结果都是关于安装和启动服务的问题,而不是停止它。所以我陷入了死胡同。

请,所有帮助将非常有用和感激。

4

1 回答 1

3

错误消息包含有关它是权限问题的建议。这种情况很少见,因为安装服务一开始就需要提升权限。未能停止服务通常与服务没有足够快地响应停止请求一样简单。CronService 是否实现了服务接口来响应停止请求?MSI 和 Windows 都不会杀死服务进程来停止它。

于 2013-07-06T00:06:46.973 回答