如何摆脱循环服务参考?

时间:2017-09-07 02:50:01

标签: c# .net windows service

我已经看过很多类似的问题,但没有人以同样的方式得到错误,所以我会发布它。

我在Visual Studio 2015 x64中创建了一个新的Windows服务。当我完成编码/测试时,我添加了服务安装程序。每次我尝试从命令行安装服务它成功但无法启动。

我使用以下命令安装服务:

c:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe VerifyVideoFiles.exe

这给出了:

Running a transacted installation.

Beginning the Install phase of the installation.
See the contents of the log file for the C:\TFS\Apps\...\VerifyVideoFiles.exe assembly's progress.
The file is located at C:\TFS\Apps\...\VerifyVideoFiles.InstallLog.

The Install phase completed successfully, and the Commit phase is beginning.
See the contents of the log file for the C:\TFS\Apps\...\VerifyVideoFiles.exe assembly's progress.
The file is located at C:\TFS\Apps\...\VerifyVideoFiles.InstallLog.

The Commit phase completed successfully.

The transacted install has completed.

一旦我尝试手动启动它,我得到:

enter image description here

我创建了一个简单的方法来吐出所有依赖项,但没有看到任何循环引用:

    private static HashSet<string> ReferencedAssemblies = new HashSet<string>();

    ...
    OutputDependencies(Assembly.GetAssembly(typeof(Program)), 0);
    ...

    static void OutputDependencies(Assembly assembly, int indent)
    {
        if (assembly == null) return;

        Console.WriteLine(new String(' ', indent * 4) + assembly.FullName);
        if (!ReferencedAssemblies.Contains(assembly.FullName))
        {
            ReferencedAssemblies.Add(assembly.FullName);

            foreach (var childAssembly in assembly.GetReferencedAssemblies())
            {
                OutputDependencies(Assembly.Load(childAssembly.FullName), indent + 1);
            }
        }
    }

此输出使用的DLL列表:

VerifyVideoFiles, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
    mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
            mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                    mscorlib, Version=4.0.0.0, Cultur'VerifyVideoFiles.vshost.exe' (CLR v4.0.30319: VerifyVideoFiles.vshost.exe): Loaded 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Data.SqlXml\v4.0_4.0.0.0__b77a5c561934e089\System.Data.SqlXml.dll'. Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
                    System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                    System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
            System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Xml
                System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                    mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Xml
            System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            SMDiagnostics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
                System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
            System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
            System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
            Accessibility, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Deployment, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
            System.Runtime.Serialization.Formatters.Soap, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
                mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
                System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    System.ServiceProcess, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Configuration.Install, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
    System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    ScannerCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
        mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
        System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
        System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

厌倦了这个项目,我开始了另一个项目。我再次得到同样的错误。相同的DLL列表。

尝试使用Windows服务项目中的扫描代码将扫描代码分解为库。同样的问题。

我也没有此代码所依赖的其他服务:

enter image description here

我在控制台上运行了sc.exe命令,它没有显示任何服务依赖项:

C:\...\x64\Release>sc qc VerifyVideoFiles
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: VerifyVideoFiles
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : "C:\TFS\Apps\...\VerifyVideoFiles.exe"
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : VerifyVideoFiles
        DEPENDENCIES       :
        SERVICE_START_NAME : \Ed

我刚刚创建了一个空的Windows服务并安装了它。同样的错误。使用VS2015的安装程序模板可能有些奇怪吗?

有什么想法吗?我可以提供的任何其他信息吗?

谢谢!

0 个答案:

没有答案