安装和启动成功后Windows服务无法正常工作(使用Wix Toolset 3.7)

时间:2013-11-05 09:09:40

标签: c# visual-studio-2012 windows-services wix wix3.7

我一直在寻找答案,但没有找到答案,所以我发布了这个。

我已经构建了一个Windows服务,我必须在客户服务器上安装它。我已成功测试了它localy(通过Visual Studio cmd提示符与installutil.exe一起安装)。现在,我正在尝试使用Wix Toolset 3.7进行安装。该服务安装并启动正常,但我没有得到任何东西。它没有做任何事情,没有调用数据库(应该),什么也没有。它存在,它存在,但它没有做sqat。它有点懒惰的服务。

我无法弄清楚我做错了什么。这是我的Wix代码:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="NeoSrvKrka" Language="1033" Version="1.0.0.0" Manufacturer="Neolab d.o.o." UpgradeCode="04f2a5be-92e1-4c53-8e45-7ae2740a9098">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" Manufacturer="Neolab d.o.o." />

        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />

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

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="NeoSrvKrka" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
            <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
             <Component Id="ProductComponent">
         <File Id="NeoSrvExe" Name="SalusWindowsService.exe" Source="..\SalusWindowsService\bin\Debug\SalusWindowsService.exe" Vital="yes" KeyPath="yes"></File>
         <File Id="NeoSrvExeConfig" Name="SalusWindowsService.exe.config" Source="..\SalusWindowsService\bin\Debug\SalusWindowsService.exe.config" Vital="yes" KeyPath="no"></File>
         <ServiceInstall
                    Id="ServiceInstaller"
                    Type="ownProcess"
                    Vital="yes"
                    Name="SalusKrkaService"
                    DisplayName="Salus Krka Service"
                    Description="Windows service za prenos narocil iz Salusa v Krko"
                    Start="auto"
                    Account="LocalSystem"
                    ErrorControl="ignore"
                    Interactive="no"
              >
         </ServiceInstall>
         <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="SalusKrkaService" Wait="yes" />
             </Component> 
        </ComponentGroup>
    </Fragment>
</Wix>

在我的应用程序中,我还创建了ProjectInstaller文件及其周围的所有魔法(也许我不会在wix中使用它?)。哦,我正在使用Visual Studio 2012,.NET 4.5,c#,windows 7(将在生产中使用Windows Server 2012)。

我正在添加一些应该执行的代码:

namespace SalusWindowsService

{     公共部分类Krka:ServiceBase     {         公共克尔卡()         {              的InitializeComponent();         }

    protected override void OnStart(string[] args)
    {
        try
        {
            Timer timer = new Timer();
            timer.Interval = 3000; //5 minut
            timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            timer.Enabled = true;

            GC.KeepAlive(timer);
        }
        catch (Exception exc)
        {
            //NeoException.Handle(exc);
        }
    }

    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    { //do something, but it is not doing anything...}}}

我在代码中放了一些断点,甚至在服务的Main函数中(它只是初始化基类),但是我从来没有到达那里。

1 个答案:

答案 0 :(得分:0)

(OP在问题中回答。转换为社区wiki答案。见Question with no answers, but issue solved in the comments (or extended in chat)

OP写道:

  

原来我没有为安装添加足够的dll。

     

所以,Wix或代码都没有错。提醒任何人在那里做同样的错误。你必须在wix下添加所有dll-s。因此,如果应用程序的Debug / bin文件夹中有多个ddl-s,则必须将其中的所有(或至少很多)添加到其中。这意味着,一个标签内有许多标签。注意,只有一个标签的KeyPath属性设置为&#34;是&#34;。