300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > clickonce 部署能cs程序_以管理员身份启动ClickOnce部署的应用程序

clickonce 部署能cs程序_以管理员身份启动ClickOnce部署的应用程序

时间:2018-10-14 17:40:08

相关推荐

clickonce 部署能cs程序_以管理员身份启动ClickOnce部署的应用程序

ClickOnce方式部署应用简单方便,估计很多人都用过,但这种方式存在一定的“缺陷”,即以管理员方式启动应用的问题,虽然出于安全考虑可以理解,但给需要管理员权限才能正常运行的程序带来了一定的麻烦,这导致部分人员放弃了ClickOnce发布。

经过查找相关资料,发现还是有办法解决这个问题的,具体操作如下:

1、修改 manifest 文件

经测试,如果应用程序没有manifest 文件的,可以不用添加 app.manifest 文件,ClickOnce发布后会生成如下格式的manifest 文件:主程序文件名命名.manifest (例如:Mytest.exe.manifest)

自动生成的manifest 文件中requestedExecutionLevel 配置与上述一致。

但以上不排除是个例,如果不配置此项出现异常时可考虑增加此设置。

2、修改程序主函数(即“应用程序的主入口点”,例如: Program.cs 中的 Main 函数)

usingSystem;usingSystem.Diagnostics;usingSystem.Reflection;usingSystem.Security.Principal;usingSystem.Windows.Forms;namespaceMyTest

{static classProgram

{

[STAThread]static voidMain()

{

Action run= () =>{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(newFormMain());

};

WindowsIdentity wi=WindowsIdentity.GetCurrent();bool runAsAdmin = wi != null && newWindowsPrincipal(wi).IsInRole(WindowsBuiltInRole.Administrator);if (!runAsAdmin)

{try{//不可能以管理员方式直接启动一个 ClickOnce 部署的应用程序,所以尝试以管理员方式启动一个新的进程

Process.Start(new ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase) { UseShellExecute = true, Verb = "runas"});

}catch(Exception ex)

{

MessageBox.Show(string.Format("以管理员方式启动失败,将尝试以普通方式启动!{0}{1}", Environment.NewLine, ex), "出错啦!", MessageBoxButtons.OK, MessageBoxIcon.Error);

run();//以管理员方式启动失败,则尝试普通方式启动

}

Application.Exit();

}else{

run();

}

}

}

}

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