100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > WPF以Clickonce方式发布后使用管理员身份运行

WPF以Clickonce方式发布后使用管理员身份运行

时间:2020-09-14 09:20:43

相关推荐

WPF以Clickonce方式发布后使用管理员身份运行

WPF的程序,在发布时采用的Clickonce方式发布,Win7的用户安装完成之后,发现执行某些操作的时候会导致程序异常。在排查后发现,是权限问题导致。如图:

是执行File.Move时引发的异常:对路径的访问被拒绝。

首先想到的是:右键-->以管理员身份运行,但是Clickonce发布过的程序,右键菜单中是没有这个选项的。

那怎么才能以管理员身份运行呢?

按照搜索的答案,

1)右键项目属性

2)选择安全性,勾选“启用ClickOnce安全设置”

3)在项目的Properties文件夹中,找到app.mainfest

4)将节点

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

改为

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

5)回到项目属性中的安全性选项,去掉“启用ClickOnce安全设置”。

6)保存,编译

一直到现在,都还是顺利的,

7)发布。。。报错!

错误 6 ClickOnce does not support the request execution level 'requireAdministrator'.

这是什么狗屁错?继续搜索,搜索的结果都是说要在项目属性页面中,安全性选项卡中的“启用ClickOnce安全设置”去掉勾选。

那就去掉勾选,然后重新发布,仍旧报错,回到安全性选项卡中发现,“启用ClickOnce安全设置”又被勾选上了。

奇怪了。。。。。

网上搜索了N久,终于找到了解决办法

为了使得发布之后的程序能够获得管理员的权限

1)app.mainfest文件中

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

节点的值设置为 asInvoker

2)在App.cs中增加以下代码:

/// <summary>/// 检查是否是管理员身份/// </summary>private void CheckAdministrator(){var wi = WindowsIdentity.GetCurrent();var wp = new WindowsPrincipal(wi);bool runAsAdmin = wp.IsInRole(WindowsBuiltInRole.Administrator);if (!runAsAdmin){// It is not possible to launch a ClickOnce app as administrator directly,// so instead we launch the app as administrator in a new process.var processInfo = new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase);// The following properties run the new process as administratorprocessInfo.UseShellExecute = true;processInfo.Verb = "runas";// Start the new processtry{Process.Start(processInfo);}catch (Exception ex){ex.WriteLog();}// Shut down the current processEnvironment.Exit(0);}}

3)重写 OnStartup 函数

protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);CheckAdministrator();//如果不是管理员,程序会直接退出,并使用管理员身份重新运行。StartupUri = new Uri("MainWindow.xaml", UriKind.RelativeOrAbsolute);}

4)保存,重新生成,发布

加入上面的代码之后,重新使用ClickOnce方式发布,安装。在运行的时候,会弹出“您想允许来自未知发布者的以下程序对此计算机进行更改吗”的对话框,点击“是” 程序就会以管理员身份运行了。

参考链接:/Tips/627850/ClickOnce-deployment-vs-requestedExecutionLevel-eq

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。