【问题标题】:error while installing window service System.Security.SecurityException安装窗口服务 System.Security.SecurityException 时出错
【发布时间】:2012-05-03 06:19:06
【问题描述】:

我创建了一个窗口服务并安装它,我创建了它的部署项目并安装了它。安装后我盯着它。成功启动。

第二天我做了一些修改,重建并重新安装,但现在它没有安装。

然后我想到了安装程序的问题,让我们为服务创建一个自定义安装程序,以便我可以随时更新我的​​代码。

如果有人将来需要它,我会这样创建它。

public class MyInstaller : Installer
    {
        ServiceProcessInstaller spi;
        ServiceInstaller si;
        public MyInstaller()
        {            
            spi = new ServiceProcessInstaller();
            spi.Account = ServiceAccount.LocalSystem;

            si = new ServiceInstaller();
            si.StartType = ServiceStartMode.Manual;
            si.ServiceName = "MyService";
            si.DisplayName = "My Service";
            si.Description = "service installed from command line";

            this.Installers.Add(spi);
            this.Installers.Add(si);

        }
}

我通过检查参数 args 从 main 方法调用它。

                            case "-i":
                            case "-install":
                                ti = new TransactedInstaller();
                                mi = new MyInstaller();
                                ti.Installers.Add(mi);
                                string logPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\install.log";
                                ctx = new InstallContext(logPath, cmdline);
                                ti.Context = ctx; //.Context ( ctx );
                                ti.Install(new Hashtable());
                                break;

现在当我尝试安装时。 我收到错误 System.Security.SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性。

我google了一下,发现服务会在安装和写入日志时尝试访问应用程序日志。

我没有写任何事件日志。我有我的 log4net 用于记录。但仍然是它的默认行为。

现在如何解决这个问题?即使我拥有所有权限,它也没有安装。

谢谢

【问题讨论】:

    标签: c# windows-services installation


    【解决方案1】:

    我发现有时您可能需要“以管理员身份运行”。如果您从命令提示符安装,您可能需要使用“以管理员身份运行”来启动

    【讨论】:

    • 我在运行时使用了 cntrl+shift+enter。然后我再次手动右键单击并以管理员身份运行,它工作正常。谢谢我在做什么愚蠢的错误。但我想知道如何提高窗口服务的启动/停止性能。
    • @sunder:启动/停止性能与您的服务正在执行的操作有很大关系。 “开始”应该没问题,因为通常你会启动一个新线程来完成这项工作。要停止,您需要一些快速的方法来停止线程正在执行的操作。所以没有通用的方法来提高性能。
    • 我创建了一个批处理文件 (.BAT) 来安装该服务,并且我以管理员身份运行该批处理,但它不起作用。然后,我以管理员身份运行命令提示符并安装没有 BAT 文件的服务,只需键入 EXE 文件的名称 -install。我不确定为什么会发生这种情况,但也许它可以帮助其他人。我认为这可能与以下事实有关
    • 要让 installutil.exe 从常规管理员运行:命令提示符,从开发人员命令提示符执行此操作:1) installutil.exe 2) 添加路径到系统属性、高级、环境变量...系统变量,路径(在我的例子中:C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe)
    • 像这样的情况,如果您作为管理员组的一部分登录,为什么必须“以管理员身份运行”?困惑。
    【解决方案2】:

    我可能对消息有单独的根本原因,但我通过将我的服务更改为作为 LocalSystem(无论如何这是我想要的)而不是 LocalService 运行来修复它。

    【讨论】:

      【解决方案3】:

      我可以确认,在“windows 7 64 bit”和“Windows 10”下,您必须:

      1) 以管理员身份运行 Visual Studio 命令提示符(右键单击..其他..以管理员身份运行)

      2) 转到您拥有 exe 的“obj”文件夹。 (cd [\obj 的所有路径]) 3) 启动 installutil [myservice.exe]

      如果不是以“管理员”身份运行,即使在旧的 win7 上也会失败。 :(

      注意:MSDN 确实解释过:

      (在:https://docs.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer

      “要安装 Windows 服务,您必须在要安装它的计算机上拥有管理凭据。”

      :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-07
        • 2019-05-27
        • 2018-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-24
        相关资源
        最近更新 更多