我想以编程方式启动“ services.msc”,然后按名称选择服务。我可以显示该窗口,但在这种情况下,未选择任何服务:

var proc = new Process();
proc.StartInfo.FileName = "services.msc";
//proc.StartInfo.Arguments = "MyServiceName";
proc.Start();


我可以指定选择服务的参数吗?

最佳答案

我一直遇到这个问题(然后是一些问题),但是我不相信没有推出自定义解决方案就不可能做到这一点(相关:how to open a service properties dialog)。

我最终使用了AutoIt(https://www.autoitscript.com/site/autoit/downloads/)。我首先使用AutoIt Window Info来获取控件详细信息。然后,我添加了对AutoItX3.Assembly.dll的引用,并添加了以下代码:

AutoItX.Run(string.Format("{0} \"{1}\"", fileName, args), AppDomain.CurrentDomain.BaseDirectory);
AutoItX.WinWaitActive("Services");
int result = AutoItX.ControlFocus("Services", "Services (Local)", "[CLASS:MMCOCXViewWindow; INSTANCE:1]");

if (result == 1)
{
    AutoItX.ControlSend("Services", "Services (Local)", "[CLASS:SysHeader32; INSTANCE:1]", "{TAB}");
    AutoItX.Send("MyService");
}


由于我不想注册该dll(以便分发文件),因此将AutoItX3.Assembly.dll,AutoItX3.Assembly.xml,AutoItX3.dll和AutoItX3_64.dll添加到了我的解决方案中。

它工作正常。就我而言,我还想弹出属性,因此之后添加了一个额外的{ENTER}。

10-08 14:34