无法在计算机上打开<myservice>服务'。'</myservice>

时间:2011-06-23 11:42:32

标签: c# windows-services

我有一个由C#创建的网站,用于在服务器中启动服务。

我使用以下方法创建了一个名为MyService的服务:

instsrv MyService %systemroot%\system32\srvany.exe

然后我使用以下代码来调用它:

ServiceController service = new ServiceController("MyService");
try
{
    service.Start();
}
catch (Exception ex)
{
    Response.Write(ex.Message);
}

但是当我访问网站并触发此事件时,它会提示我

Cannot open <MyService> service on computer '.'

是否因为安全性或权限问题?任何有明确步骤的指南都非常感谢。

4 个答案:

答案 0 :(得分:2)

使用iis(版本6及更高版本),使用应用程序池运行Web应用程序。 EAch应用程序池可以与特定用户(标识)一起运行,默认情况下是NETWORK SERVICE。将此用户添加到本地管理员是一个非常糟糕的主意。

可能的方法:

  • 授予启动/停止此用户服务的必要权限,设置专用应用程序池以使用此身份并确保该帐户具有对asp / .net应用程序路径的读访问权。
  • 也创建一个专用帐户。在您的应用程序中,使用您在配置中安全存储的用户名/密码连接到服务管理(crypt部分)。我不确定您是否可以使用服务控制指定用户/密码,但至少可以使用WMI或Process.Start和net stop / net start命令。

答案 1 :(得分:2)

我实际上解决了最重要的问题。

  • 此案例中的服务是“MyService”需要设置登录本地系统帐户并选中允许服务与桌面交互
  • 在IIS管理器中,为特定网站创建应用程序池。并将网站加载到其中。
  • 特定应用程序池标识需要预定义为 Local Syatem

这些是IIS和services.msc

中所需要的

另一方面,MAC地址仍然存在错误 所以,我们需要一个可以由machineKey Generator生成的。
生成的machineKey需要粘贴到下面的标签。

然后复制下面的整个报价块并将其粘贴到Web.config

<pages buffer="false"
enableViewState="false"
enableSessionState="false"
enableViewStateMac="false"
validateRequest="false"
enableEventValidation="false"
viewStateEncryptionMode ="Never"/>

<machineKey 
validationKey="8FCCB821044C5174C551129400F278B5629C64EAC195046DA5FE608EF418913C1139636E13FE  9F8C35AD3C10C394CAC1D9CEBB8B6BDA018165E91136B1AADBE1"
decryptionKey="3F260119F4CC0A0DD8C6B4979C70644A0ED2DD19B3ADB00F85FB7C83634FC544"
validation="SHA1"
decryption="AES"
/>

然后问题就会得到解决,也许你们面临的情况可能会有所不同,但我希望它可以帮助某些人,因为我在这很长一段时间内都在挣扎。

此外,我使用此代码,因此在启动和停止创建的服务时不会发生冲突。

if (service.Status == ServiceControllerStatus.Stopped)
        {

            try
            {
                service.Start();

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

        }
        else
        {
            try
            {
                service.Stop();
                service.Start();

            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }

        }

祝你好运,谢谢你们的帮助。

REF: http://www.csharp-examples.net/restart-windows-service/
http://forums.asp.net/t/906759.aspx/3/10

答案 2 :(得分:1)

嗨,我有同样的问题,给予我认为包括清洁工的所有团体的许可,它没有帮助我最终在我的网络配置中尝试了这一行

<identity impersonate="true" userName="Domainname\admin" password="123" />

答案 3 :(得分:1)

它可能会帮助有相关问题的人:

在我的服务器上,powershell命令行管理器失败并显示相同的错误消息。 这是因为,即使我以本地管理员身份登录,我也需要以管理员身份运行PowerShell环境(右键单击,以管理员身份运行)。