gpt4 book ai didi

c# - 以编程方式提升权限并尽可能对用户友好

转载 作者:太空宇宙 更新时间:2023-11-03 11:25:25 28 4
gpt4 key购买 nike

据我所知,不可能在正在运行的进程中提升权限。因此-按照建议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
    出版商:我们的公司
    文件来源: native 硬盘
    程序位置:%path% + %arguments%

    我需要隐藏参数(有一些合理的信息不是那么重要,但如此轻易地显示它并不好)并且可能我还想将程序名称更改为 MainApp 以便用户认得他习惯的应用名称。

  2. 我想使 Foo 中的主窗体成为 MainApp 中主窗体的子窗体,这样我就可以轻松地在 中显示主窗体Foo 在其父级的中心

最佳答案

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

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

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

关于c# - 以编程方式提升权限并尽可能对用户友好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533285/

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