据我所知,在运行过程中无法提升权限。因此 - 正如我所建议的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();
现在我想让这个程序对用户尽可能友好。我有两个主要问题。
提示用户显示以下UAC窗口:
节目名称:Foo
出版社:OurCompany
文件来源:此计算机上的硬盘
计划地点:%path%+%参数%
我需要隐藏参数(有一些明智的信息并不那么重要但很容易显示它并不好)我可能还希望将程序名称更改为MainApp
以便用户识别他习惯的app名称。
Foo
中将主要表单中的主要表单设为MainApp
,以便我可以轻松地在Foo
的中心显示主要表单。它的父母答案 0 :(得分:2)
我建议使用提升的特权启动应用程序的第二个副本..然后使用SendMessage和WM_COPYDATA(或WM_USER之上的一些用户定义的偏移量)将消息发布到新实例,指示它做什么(通过那些args,告诉它在哪里居中,等等)。或者使用其他形式的IPC(进程间通信:Windows消息,命名为管道,内存映射文件,tcp / ip等等)
通过这种方式,您可以保留应用程序名称,签名,程序位置......一切对用户来说都是正常的。
您可能会从未提升的流程启动表单,只处理提升的数据处理 - 通过您的IPC工具传递数据。