7

我想向我的应用程序(服务的前端)添加一个按钮,该按钮将为我的服务打开服务属性对话框(如 services mmc snapin 中)。

打开文件属性的例子很多,但这不是我想要的。我不知道从哪里开始。

4

3 回答 3

6

基于services.msc,页面来自filemgmt.dll并被调用ServicePageGeneral。注册 COM 组件后,我找不到任何有关 CLSID 的文档,也找不到filemgmt.dll.

这并不排除存在已建立的 API 或显示对话框的命令行选项的可能性,但我肯定找不到。

进一步证实了对话框不可重用的情况,Process Explorer和 SQL Server 配置管理器都重新实现了对话框,而不是显示services.msc版本。

相关:如何从命令行或链接打开单个服务的属性框?

于 2014-11-15T19:33:58.367 回答
1

您应该开发自定义“服务控制台”,使用 .NET 和 WMI 类,您可以查询计算机中的服务列表,获取实际状态,此外,您应该从应用程序执行 Windows 命令以启动、停止服务。

于 2014-11-20T23:34:34.363 回答
0

今天我发现这是可能的!

这是 Delphi 上的代码,它使用MMC 2.0 自动化对象模型

var
  objMMC: OleVariant;

procedure ShowSvcProperties(const ASvcName: string);
var
  objView, objList, objItem: OleVariant;
  SvcEnum: IEnumVariant;
  Value: UInt32;
  sName: string;
begin
  objMMC := CreateOleObject('MMC20.Application');
  objMMC.Load('services.msc');
  objView := objMMC.Document.ActiveView;
  objList := objView.ListItems;
  SvcEnum := IUnknown(objList._NewEnum) as IEnumVariant;
  while SvcEnum.Next(1, objItem, Value) = S_OK do
  try
    sName := objItem.Name;
    if SameText(sName, ASvcName) then begin
      objView.Select(objItem);
      objView.DisplaySelectionPropertySheet;
      Break;
    end;
  finally
    VariantClear(objItem);
  end;
end;

现在要显示服务属性对话框,只需调用ShowSvcProperties('Plug and Play');

于 2020-03-15T21:11:53.793 回答