背景:我绝不是Windows安全/用户权限专家.我有一个应用程序(用C#编写),该应用程序必须能够写入/删除文件&根目录中的文件夹,在磁盘上的其他位置写入/删除文件,在系统注册表(本地计算机)中写入/修改值,然后启动&停止其他应用程序和服务.我认为至少其中一些操作需要管理员特权.
我尝试运行此程序,并且在关闭了UAC的计算机上,无需任何其他设置,它的效果很好.但是,在启用了UAC(在Windows 7中高于“从不通知”的任何级别)的计算机上,它将崩溃.我需要它才能在所有计算机上工作.
到目前为止,我只需要手动选中“以管理员身份运行该程序”复选框即可,一切都会好起来.但是,现在我们决定允许客户自行安装此软件,并且需要“开箱即用”运行.
我在Visual Studio 2008中有一个部署项目,该项目将安装所有内容并在注册表中写入必要的启动数据.我现在需要做的是设置“以管理员身份运行该程序”标志.我猜这不是我想要的那么简单.
那么,这样做的正确方法是什么?该程序是在启动时启动的,如果UAC每次重新启动计算机时都弹出(并且可能使屏幕变暗),这会对我们的客户感到不快.
谢谢您的帮助.
编辑:谢谢您的答复.我意识到围绕UAC的工作将不被重视,并且我可以看到Microsoft不支持“白名单”,因此它只会请求一次许可.我可以尊重这一点,但是我确实有一些后续问题:
>您能否为我提供一个链接,该链接将向我展示如何正确地将程序提升到正确的提升状态?有关于什么选择的文献,等等.基本上,我会喜欢UAC 101指南.
>当我需要额外的特权时(只有然后通过UAC提示),是否可以提高安全状态.基本上,此应用程序在后台运行,大部分时间几乎不执行任何操作.它会不时地检查一些文件(这时我将要求能够写入磁盘并读取注册表(这时只读是可以的),但是由于它是一个临时文件夹,所以无论我在哪里如果存在,应用程序可以在没有任何特权的情况下进行写操作.)
但是在某个时候,我将需要执行所有其余任务(无论如何,用户都需要确认此操作),因此,如果UAC在这一点上提示,那将没有问题.有没有办法在此时提升它,然后将其返回到默认权限?
>这样的解决方案是否可以与Windows的较旧版本一起使用,包括Vista和Xp(也许还有较旧的版本?)才能使它起作用?
解决方法:
正确的方法是使用UAC提示(您可以通过程序的清单设置)来提高程序启动的时间-试图变得聪明并绕过它就皱眉了.
考虑一下-如果您可以安装在没有UAC提示的情况下会自动提升的东西… UAC的意义是什么?
要将UAC清单添加到程序,只需将清单添加到项目中并进行编辑. UAC的示例清单是here.如果要在最后一个可能的时刻提升,则需要生成一个单独的进程-您不能提升现有的进程.因此,将其分开,然后使用
Process.StartInfo.UseShellExecute = true;
Process.StartInfo.Verb = "runas";
标签:deployment,setup-deployment,uac,c
来源: https://codeday.me/bug/20191210/2100538.html