在 windows 下有没有什么办法让带有 UAC 盾标的程序以非管理员身份运行?

2020-04-23 23:41:30 +08:00
 fujrkx

现在 windows 下管理员权限有被滥用的趋势,很多程序安装时只是解压文件,不需要创建服务,修改驱动等,使用时也不涉及系统底层的操作,可以说是全程都不需要管理员权限,可是却在编译时就加上了 UAC 运行级别。还有一些程序比如一些软件下载网站上下载到的智能下载器,它也是添加了 UAC 运行级别,强迫以管理员身份运行,然后顺便安装一堆流氓软件。这些程序要么以管理员身份运行,然后被它恶心一下,要么无法运行。 那么有没有什么办法让那些带有 UAC 盾标的程序以非管理员身份运行?

PS:顺便吐槽一下,其实 windows 操作系统会根据程序的需要强迫用户以管理员身份运行该程序,这种设计有点为虎作伥的感觉。

5284 次点击
所在节点    程序员
35 条回复
zhjits
2020-04-24 00:04:40 +08:00
改 manifest
Cooky
2020-04-24 00:09:46 +08:00
沙盘
yanqiyu
2020-04-24 00:12:26 +08:00
安装程序的话可以直接解压看看能不能用
shansing
2020-04-24 00:13:02 +08:00
试试在 PowerShell 中执行这个再运行程序?
$env:__COMPAT_LAYER = 'RunAsInvoker'

ref: https://geelaw.blog/entries/isolate-app/
szzhiyang
2020-04-24 00:23:45 +08:00
这些应用程序完全可以在拿不到管理员权限时主动拒绝运行,所以即便能以非管理员身份运行它们又有何用?
szzhiyang
2020-04-24 00:30:24 +08:00
即便应用程序没有在清单中申请管理员权限(也就是它没有盾牌图标),它照样可以强迫你以管理员身份运行它,它在拿不到管理员权限时主动退出不就行了?
ysc3839
2020-04-24 00:32:26 +08:00
@szzhiyang 但是有的程序就没检测,不试试怎么知道呢?
szzhiyang
2020-04-24 00:40:20 +08:00
@ysc3839 绝大多数需要管理员权限才能运行的应用程序即便不主动检测自己是否有管理员权限也照样会在运行过程中崩溃的,因为这些应用程序的开发者一般都不会处理应用程序因没有管理员权限而产生的异常(比如无法写入 Program Files 文件夹或 HKLM 注册表等),而没有处理异常就会造成应用程序的崩溃。
szzhiyang
2020-04-24 00:49:32 +08:00
不仅仅是 Windows,任何操作系统(包括 iOS )下的应用程序都完全可以在拿不到自己想要的权限时主动退出,iOS 应用程序之所以很少这样做仅仅是因为有 Apple 的审核罢了。
ysc3839
2020-04-24 01:41:53 +08:00
@szzhiyang 但是楼主所说的是不需要在这些地方写入,但是又申请了管理员权限的程序。
另外,尝试向没有权限写入的地方写入并不会产生异常,Win32 API 是 C 语言风格的,没有异常机制,需要程序主动检查返回值才知道操作是否成功,如果忽略了返回值的话,程序会继续运行。
redeemer1001
2020-04-24 07:05:31 +08:00
@ysc3839 #10 如果是.net 的安装器就会崩溃
PS:我所知的是搜狗浏览器的安装,会弹出 UAC 请求管理员权限,但取消后,它还会继续安装……真是贱
xingfu0539
2020-04-24 08:42:22 +08:00
我了解的很多杀毒软件的一个思路,就是后台起一个高权限的服务,用这个服务来启动自己想要启动的进程,也就不用再申请管理员权限了
fujrkx
2020-04-24 09:40:56 +08:00
@redeemer1001
你说的搜狗浏览器取消 UAC 请求后还会继续安装,是因为它安装在了家目录下的 appdata 文件夹里。不要把安装软件和管理员权限划上等号。软件安装时需要管理员权限是因为它想安装在所有用户公用的 peogram files 文件夹里或需要创建服务和修改驱动。
你觉得搜狗浏览器通过安装在 appdata 目录下来避开 UAC 提示属于流氓行为,但我不同意。事实上,我希望所有不需要高权限的软件都采取这种安装方式。这样可以确保它的安装过程仅限于解压文件,没有做其他流氓行为,方便清理,同时方便用多用户隔离来运行。
我反对的是很多软件明明只需要解压文件,明明可以安装在 appdata 目录下,却偏要安装在 program files 下,同时为此申请管理员权限。而一旦给了它权限,它就可以顺便做一些流氓行为。
szzhiyang
2020-04-24 09:54:29 +08:00
@ysc3839 用 C# 编写的应用程序就会如此。
ysc3839
2020-04-24 09:55:59 +08:00
@szzhiyang 那是因为语言 /框架封装了系统 API,并主动抛出了异常,不代表这个平台的所有程序都有这种特性。
szzhiyang
2020-04-24 10:05:06 +08:00
@ysc3839 总之,你所提到的虽然要求了管理员权限但是仍然能在没有管理员权限的情况下完全正常运行的应用程序实在是太少了,楼主的想法几乎没有多少实际应用价值。
g00001
2020-04-24 10:34:36 +08:00
管理权限的启动警告有一些规避的方法,例如安装一个后台服务,或者以管理权限创建一个计划任务,都能做到下次启动不弹警告,但这样实质上还是有管理权限(但对用户会更友好)。

很多软件功能确实可能要用到管理权限 - 哪个软件开发者都不会无故要讨人厌,Windows 自己判断是不是要管理权限不太靠谱,例如文件名或者版本信息里有疑似安装的字眼 - 都会强迫安装程序以管理权限启动,只要小心避免触发这些规则 - 就可以避免这一问题。
shansing
2020-04-24 11:07:49 +08:00
@szzhiyang 我来告诉你楼主的想法有什么价值。通过我所发链接的方法,已经成功安装(过):

- 百度网盘
- Chrome (虽然本身也支持普通用户安装)
- Firefox (虽然本身也支持普通用户安装)
- QQ 音乐 (可以安装,使用时提示提权,不授权好像无大碍)
- 阿里旺旺
- 微信
- 腾讯会议 (需要一点小技巧才能运行)

瞧,对付某些喜欢改系统的软件非常有用。你的理论分析很有道理,但也许安装程序本身不会崩溃,只是其调用的对系统进行修改的外部程序会崩溃,而安装程序只是等待外部程序结束而没有判断返回状态呢。确实有些程序仍然不受(那个命令所设置的)环境变量的限制,但其他情况下只要我们设置恰当的安装目录,这个技巧没有那么没用。
szzhiyang
2020-04-24 11:33:30 +08:00
@shansing 你确实成功以非管理员身份安装了它们,但是不常规的安装方式是出乎它们开发者意料的,对它们功能的干扰也是难以估计的,因此它们运行时会发生什么意料之外的事情是难以确定的。
Keyes
2020-04-24 11:36:39 +08:00
我是放到 sandboxie 里运行的,包括 qq 、百度网盘什么的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665508

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX