【问题标题】:how to open a service properties dialog如何打开服务属性对话框
【发布时间】:2012-11-13 23:20:45
【问题描述】:

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

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

【问题讨论】:

  • 我不确定这是否可能。您可以使用 ServiceController 类并非常轻松地构建自己的对话框。
  • 我已经使用服务控制管理器 api 来完成安装、启动、停止、卸载等基本操作......但是我想添加属性对话框,以便用户可以自定义其他属性类似恢复选项的服务
  • 我明白了。我找不到使用 System.serviceProcess 中的 API 执行此操作的方法。以下问题stackoverflow.com/questions/6364700/… 中的答案显示了如何自己处理恢复的方法。
  • 我很肯定必须有一种类似于文件属性对话框的方式(使用 ShellExecute)。例如:其他进程如何打开显示属性对话框或其他经常与 shell 关联的类似对话框?
  • 您找到有效的解决方案了吗?

标签: c# service dialog windows-shell shellexecute


【解决方案1】:

基于services.msc,页面来自filemgmt.dll,称为ServicePageGeneral。注册 COM 组件后,我找不到任何有关 CLSID 的文档,也找不到 filemgmt.dll 中存在的任何其他字符串。

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

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

相关:How do I open properties box for individual services from command line or link?

【讨论】:

  • 哎哟。找到我想做的事情所需的努力似乎是单一的。自己做可能需要更少的时间。
  • @LawrenceWard,我倾向于同意。
  • @Mitch,这是可能的!你可以看到我的回答
【解决方案2】:

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

【讨论】:

  • 我真的不想复制操作系统已经完成的工作。任何管理员都已经知道如何使用此对话框。
  • 劳伦斯,你问问题两年后还需要对话吗? :)
  • 我愿意,它确实会为我的产品提供一个漂亮的附加功能。当时我认为自己制作所需的工作量太大,并且从未包含该功能。
【解决方案3】:

今天我发现这是可能的!

这是 Delphi 上的代码,使用 MMC 2.0 Automation Object Model

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');

【讨论】:

    猜你喜欢
    • 2017-05-06
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多