2011-06-23 42 views
14

我有一個由C#創建的網站,它將在服務器中啓動服務。
無法在計算機上打開<MyService>服務'。'

instsrv MyService %systemroot%\system32\srvany.exe 

然後我使用下面的代碼來調用它:

我用這個創建了一個服務叫做MyService

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

但是當我訪問該網站,並觸發該事件,它提示我

Cannot open <MyService> service on computer '.'

是否因爲安全或許可問題?任何明確的步驟指南非常感謝。

+1

您的Web應用程序在哪個身份下工作?默認情況下,它是網絡服務......它不會有權啓動/停止服務 –

+0

@steve:對不起,我的疑問是什麼,你是什麼意思?如果它是網絡服務。有沒有其他方法可以解決這個問題?我嘗試添加NETWORK SERVICE作爲管理員組。我嘗試在服務>屬性>登錄>登錄爲網絡服務。它似乎也不能解決它。 – NewBirth

回答

2

我實際上已經解決了頂級場景的問題。

  • 在這種情況下,服務是「則將MyService」需要設置登錄到本地系統帳戶,並檢查允許服務與桌面
  • 在IIS管理器進行交互,創建一個應用程序池的特定網站。並加載網站到它。
  • 的特定應用程序池Identitys需要預先定義爲本地系統的研究與開發

這些就是需要在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); 
      } 

     } 

祝你好運,謝謝你們的幫助。

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

2

使用iis(版本6和更高版本),Web應用程序使用應用程序池運行。 EAch應用程序池可以與特定用戶(身份)一起運行,默認情況下爲NETWORK SERVICE。將此用戶添加到本地管理員是一個非常糟糕的主意。

可能方式:

  • 授予必要的權限,啓動/停止服務,這個用戶,安裝一個專用應用程序池使用該標識,並確保該帳戶具有讀取訪問ASP/.NET應用程序路徑。
  • 也創建一個專門的帳戶。在您的應用程序中,使用安全地存儲在配置中的用戶名/密碼連接到服務管理(crypt部分)。我不確定是否可以使用服務控制指定用戶/密碼,但至少可以使用WMI或Process.Start和net stop/net start命令。
+0

非常有什麼想法?是好是壞? – configurator

+0

一個壞主意......編輯:) –

1

嗨,我有相同的概率已發放的允許,我想所有的組包括清潔工和它終於沒有幫助我在我的web配置

試過這條線
<identity impersonate="true" userName="Domainname\admin" password="123" /> 
1

這可能有助於有人用相關的問題:

我的服務器上,PowerShell的命令行用了同樣的錯誤messag失敗即 這是因爲,即使我以本地管理員身份登錄,我需要以管理員身份運行PowerShell環境(右鍵單擊,以管理員身份運行)。

相關問題