gpt4 book ai didi

c# - 如何远程启动和停止服务

转载 作者:太空狗 更新时间:2023-10-29 23:13:02 25 4
gpt4 key购买 nike

这是我第一次在这里发帖,也是我第二次编码。因此,为了了解这一切是如何工作的,我尝试查找代码片段并复制/粘贴它们,直到我的应用程序似乎可以运行为止。我以前写过一些批处理和 ps 脚本,但老实说,我更喜欢系统管理和硬件......直到现在!

我的项目是一个简单的GUI工具,用于启动和停止某台服务器上的TeamViewer服务。我想让它尽可能简单,直到我在同事的计算机上启动该应用程序向他们展示如何使用它之前,它似乎一直有效。

我收到错误:System.InvalidOperationException:Der Dienst TeamViewer kann nicht auf dem Computer MYSERVERNAME geöffnet werden。 ---> System.ComponentModel.Win32Exception: Zugriff verweigert,这显然与用户权限有关。所以我在谷歌上搜索了很长一段时间关于模拟和 WMI 服务凭证,但现在我被卡住了,不得不向你们寻求帮助。

这是我的代码:

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void EIN_Click(object sender, EventArgs e)
{
String svcName = "TeamViewer";
String machineName = "MYSERVERNAME";
var sc = new System.ServiceProcess.ServiceController(svcName, machineName);
sc.Start();
sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running);
}

private void AUS_Click(object sender, EventArgs e)
{
String svcName = "TeamViewer";
String machineName = "MYSERVERNAME";
var sc = new System.ServiceProcess.ServiceController(svcName, machineName);
sc.Stop();
sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped);
}
}

如果有人能帮助我,我会很高兴!

p.s.:我的 Powershell 脚本非常有效,但我想让它看起来更复杂 :)

Edit1:我尝试停止/启动服务的服务器不是域的成员,但域的每个成员都应该能够停止/启动服务。

最佳答案

我找到了一篇文章,它帮助我完成了我的代码。可以查到here .

编辑1:下面是代码现在的样子:

private void EIN_Click(object sender, EventArgs e)
{
try
{

#region Code to start the service

string serviceName = "TeamViewer";
string IP="actual-IP-address";
string username ="actual-username";
string password ="actual-password";

ConnectionOptions connectoptions = new ConnectionOptions();
//connectoptions.Impersonation = ImpersonationLevel.Impersonate;
connectoptions.Username = username;
connectoptions.Password = password;

//IP Address of the remote machine

ManagementScope scope = new ManagementScope(@"\\" + IP + @"\root\cimv2");
scope.Options = connectoptions;

//WMI query to be executed on the remote machine
SelectQuery query = new SelectQuery("select * from Win32_Service where name = '" + serviceName + "'");

using (ManagementObjectSearcher searcher = new
ManagementObjectSearcher(scope, query))
{
ManagementObjectCollection collection = searcher.Get();
foreach (ManagementObject service in collection)
{
if (service["Started"].Equals(false))
{
//Start the service
service.InvokeMethod("StartService", null);
//here i added a picture box which shows a green button when the service is started
pictureBox1.Image = Properties.Resources._120px_Green_Light_I_svg;
}

}
}

#endregion

}
catch (NullReferenceException)
{

}
}

关于c# - 如何远程启动和停止服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com