2017-04-06 144 views
0

所以我试图安装使用TopShelf,本身运行良好,没有任何问题的应用程序构建的应用程序。我遇到的问题是当我尝试安装服务时。 TopShelf服务使用myapp.exe install <options>指令安装(从管理员命令行)。我已经将该指令包装在自定义操作中(请参阅下文)。这是运行的,因为我可以在安装时看到一个黑盒弹出窗口。但是,该服务无法安装。当我从管理员命令行运行msi安装时,该服务将正确安装。我已将所有与管理员相关的参数包含在WiX文件中(另见下文)。我完全没有想法,需要帮助,任何人都可以在WiX文件中看到任何内容,或者是否有人知道什么阻止了服务的安装?与维克斯安装TopShelf失败,因为管理员权限

我曾尝试:

Topshelf - Custom Action in Wix Not Executing

Add Coffee and Shake Well - TopShelf

我也曾尝试包裹调用在一个单独的WiX的自定义操作项目执行topshelf应用程序,这也失败了相同原因。

<Product Id="*" Name="PackageName" 
     Language="1033" 
     Version="1.0.0.0" 
     Manufacturer="Manufacturer" 
     UpgradeCode="e7780903-3cf9-4ecc-b65a-45bc18b500df"> 
    <Package InstallerVersion="200" 
      Compressed="yes" 
      InstallScope="perMachine" 
      InstallPrivileges="elevated" 
      Platform="x64" /> 

    <Property Id="MSIUSEREALADMINDETECTION" Value="1" /> 

    <MajorUpgrade AllowSameVersionUpgrades="yes" 
       DowngradeErrorMessage="A newer version of [ProductName] is already installed." 
       Schedule="afterInstallInitialize" /> 
    <MediaTemplate EmbedCab="yes"/> 

    <Feature Id="ProductFeature" Title="FeatureName" Level="1"> 
    <ComponentGroupRef Id="ProductComponents" /> 
    </Feature> 

    <CustomAction Id="InstallService" 
       FileKey="MyApp.exe" 
       ExeCommand="install" 
       Impersonate="yes" 
       Execute="immediate" /> 
    <CustomAction Id="StopService" 
       FileKey="MyApp.exe" 
       ExeCommand="stop" 
       Execute="immediate" /> 
    <CustomAction Id="UninstallService" 
       FileKey="MyApp.exe" 
       ExeCommand="uninstall" 
       Execute="immediate" /> 

    <InstallExecuteSequence> 
    <Custom Action="InstallService" After="InstallFinalize" > 
     NOT Installed AND NOT REMOVE 
    </Custom> 
    <Custom Action="StopService" After="InstallInitialize" > 
     (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
    </Custom> 
    <Custom Action="UninstallService" After="StopService"> 
     (NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL") 
    </Custom> 
    </InstallExecuteSequence> 
</Product> 

回答

1

您的自定义操作有几个问题。一个是InstallService CA是即时的,这意味着1)它在安装文件之前,2)它不会以高程运行。它需要延迟并在InstallFinalize之前。

如果这只是一个普通的Windows服务,那么你应该使用一个ServiceInstall节点进行安装(和卸载)以及的ServiceControl停止,启动,并将其删除。

+0

感谢您的意见,应尝试deferrered敲定变化时,我得到了一会儿以后。该topshelf生态系统是值得一看,它包装了Windows服务启动停止和配置,从而使Windows服务项目可以从调试没有包装它作为一个控制台应用程序来运行,也可以从主应用程序与开关安装没有重新编译等。绝对值得一看,我的解释并不是很棒! –

+0

继承人一个链接:http://topshelf-project.com –

+0

布里尔,你是正确的,改变CA有:'冒充=“无”','执行=“延期”'并设置执行'=前“InstallFinalize”'感谢您的帮助!只是要弄清楚现在卸载!从来没有这么麻烦! –