【问题标题】:Elevating privileges programmatically and as more user friendly as possible以编程方式提升权限并尽可能地对用户友好
【发布时间】:2012-03-02 12:28:00
【问题描述】:

据我了解,不可能在正在运行的进程中提升权限。因此 - 正如 here 建议的那样 - 从我的 MainApp(通过 ClickOnce 部署)我目前正在启动一个单独的进程(一个签名的 exe,我们称之为 Foo.exe)用于运行需要管理员权限的活动:

Process p = new Process();
p.StartInfo.FileName = "Foo.exe";
p.StartInfo.Arguments = "args...";
p.StartInfo.UseShellExecute = true;
p.StartInfo.Verb= "runas";
p.Start();
p.WaitForExit();

现在我想让这个过程对用户尽可能友好。我有两个主要担忧。

  1. UAC 窗口提示用户:

    程序名称:Foo
    发布者:OurCompany
    文件来源:此计算机上的硬盘
    程序位置:%path% + %参数%

    我需要隐藏参数(有一些敏感信息不是那么重要,但这么容易显示它并不好)并且可能我还想将程序名称更改为 MainApp 以便用户识别应用程序名称他已经习惯了。

  2. 我想让Foo 中的主窗体成为MainApp 中主窗体的子窗体,以便例如我可以轻松地在其父窗体的中心显示Foo 中的主窗体

【问题讨论】:

    标签: c# windows-7 uac privileges


    【解决方案1】:

    我建议使用提升的权限启动您的应用程序的第二个副本。然后使用 SendMessage 和 WM_COPYDATA(或高于 WM_USER 的一些用户定义的偏移量)向新实例发布一条消息,指示它要做什么(传递这些参数,告诉它在哪里居中,等等)。或者使用其他形式的 IPC(进程间通信:windows 消息、命名管道、内存映射文件、tcp/ip 等...)

    通过这种方式,您可以保留应用程序名称、签名、程序位置......一切对用户来说都是正常的。

    您甚至可以从未提升的进程启动表单,并且只在提升的一侧处理数据处理 - 通过您的 IPC 传递数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2016-10-30
      • 1970-01-01
      • 2011-04-13
      • 2011-05-20
      • 1970-01-01
      • 2015-12-11
      相关资源
      最近更新 更多