2014-02-27 94 views
0

我已經制作了Windows服務並將其安裝在我的系統上。現在根據我的要求,我必須使用Windows窗體應用程序中的按鈕單擊來啓動和停止此Windows服務。 這是我的代碼..無法在計算機上打開Servicename服務'。'。使用c編程啓動Windows服務時出錯#

public partial class Form1 : Form 
{ 
    string svcStatus; 
    ServiceController myService; 

    public Form1() 
    { 
     InitializeComponent(); 

     myService = new ServiceController(); 
     myService.ServiceName = "ServiceName"; 
     svcStatus = myService.Status.ToString(); 
    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
     if (svcStatus == "Stopped") 
     { 
      myService.Start(); // START the service if it is already Stopped 

      string svcStatusWas = ""; 
      while (svcStatus != "Running") 
      { 
       if (svcStatus != svcStatusWas) 
       { 
        Console.WriteLine("Status: " + svcStatus); 
       } 

       svcStatusWas = svcStatus; 

       myService.Refresh(); 
       svcStatus = myService.Status.ToString(); 
      } 
      Console.WriteLine("Service Started!!"); 
     } 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     if (svcStatus == "Running") 
     {     
      myService.Stop(); // STOP the service if it is already Running 

      string svcStatusWas = ""; 
      while (svcStatus != "Stopped") 
      { 

       svcStatusWas = svcStatus; 

       myService.Refresh();  
       svcStatus = myService.Status.ToString(); 
      } 
      Console.WriteLine("Service Stopped!!"); 
     } 
    }  
} 

}

我收到錯誤 「計算機 '' 無法打開服務名的服務。」在這一行myService.Start();

請幫幫我。

+0

您試圖啓動的服務真的叫做「ServiceName」嗎? – ColinM

+0

服務是否在機器上?你確定你使用*服務名*,而不是服務可執行文件的*文件名*嗎? –

+1

您是否有權啓動/停止正在運行的用戶下的服務? – Lloyd

回答

-1

Pranav,你需要以管理員權限運行你的應用程序。如果以管理員身份運行Visual Studio,則應用程序應該在調試模式下正常工作。

當您開始部署應用程序時,您可以默認以管理員模式運行它,或者爲應用程序分配適當的權限以使其啓動和停止特定的服務(我相信這是在命令行上完成的)。我之前已經完成了這項工作,而Google的快速搜索功能可以幫助您。

1

這可能不是一個問題,如果你是一個XP的計算機上或視覺工作室的調試器下運行,但只有當你在Windows 7機器上部署你的程序,你看到的錯誤:

Cannot open < servicename > service on computer '.'.

這很可能是因爲自Vista關於用戶帳戶控制後發生的權限更改。

如果您嘗試以管理員身份運行應用程序並且問題沒有發生,您可以驗證這確實是導致問題的原因。

爲了啓動或停止Windows服務,您需要運行具有管理權限的C#程序。

這既可以手動完成,通過右擊應用程序,然後單擊「以管理員身份運行」

或者,這可以通過編程設置你的程序總是與管理權限運行,如果您添加完成下面在位於屬性文件夾在解決方案資源管理項目的app.manifest文件代碼:

<assemblyIdentity version="1.0.0.0" name="MyApplication.app" /> 
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
<security> 
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
<!-- UAC Manifest Options 
    If you want to change the Windows User Account Control level replace the 
    requestedExecutionLevel node with one of the following. 

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

    If you want to utilize File and Registry Virtualization for backward 
    compatibility then delete the requestedExecutionLevel node. 
--> 
<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
</requestedPrivileges> 
<applicationRequestMinimum> 
<defaultAssemblyRequest permissionSetReference="Custom" /> 
<PermissionSet class="System.Security.PermissionSet" version="1" Unrestricted="true" ID="Custom" SameSite="site" /> 
</applicationRequestMinimum> 
</security> 
</trustInfo> 
</asmv1:assembly> 

你可以找到關於創建和嵌入應用程序清單(UAC)更多信息在這裏: https://msdn.microsoft.com/en-us/library/bb756929.aspx

相關問題