V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thiiadoewjwe
V2EX  ›  Windows

windows 开发,软件在 C 盘,是否可以绕过管理员权限来进行写入

  •  
  •   thiiadoewjwe · 1 天前 · 2236 次点击
    技术栈:C++,MFC

    现象:软件默认安装到 C:\Program Files (x86),当软件运行时,进行一些写入操作时(比如从云端下载资源到本地,目前也是默认下载到 C:\Program Files (x86)下我的安装目录中),会失败

    目前解决方案:1.以管理员权限运行 2.软件一开始就安装到非 C 盘

    通过 AI 得到的方案:程序安装到 C:\Program Files (x86),但进行需要进行写入操作的相关文件夹,不放在 C:\Program Files (x86),而是放到 C 盘其他目录下

    问题:1.AI 的回答是否可行 2.如何能安装到 C:\Program Files (x86)的前提下,可以不开管理员权限,也能进行写入操作呢
    第 1 条附言  ·  23 小时 37 分钟前
    感谢各位大佬的建议,我个人总结如下,希望能帮到大家

    如果程序安装到 Program Files 下:
    1.程序安装和用户配置文件分开,前者放到 Program Files 里,后者放到 appdata 里( windows 官方推荐)
    2.安装时把文件夹改成写入权限(可能会有风险,不推荐,以及有些杀毒软件不会让更改 Program Files 下的文件权限)
    3.动态加载权限,文件写入时弹出,让用户手动点击确认开启管理员权限(比较影响用户体验)

    如果程序不安装到 Program Files 下:
    安装到 C:\Users\用户名\AppData\Local\Programs
    像 vscode ,以及一些其他软件都是这样做的
    这样能获取所有的权限,但只为电脑该用户创建,多用户的话不可行

    目前来看安装到 C:\Users\用户名\AppData\Local\Programs 对现有软件改动最小,最方便,并且也有影响力比较大的软件这样做
    29 条回复    2025-11-18 16:01:53 +08:00
    Cooky
        1
    Cooky  
       1 天前
    %APPDATA%
    zliea
        2
    zliea  
       1 天前
    %APPDATA% +1
    thiiadoewjwe
        3
    thiiadoewjwe  
    OP
       1 天前
    @Cooky 感谢回复,刚才简单用 AI 搜了下%APPDATA%,发现它应该还是说把写入的文件放到非 C:\Program Files (x86)目录下,但我的问题 2 是想,下载的文件依然保存在 C:\Program Files (x86)目录下,是否我理解有误,再次感谢
    thiiadoewjwe
        4
    thiiadoewjwe  
    OP
       1 天前
    @zliea 感谢回复,刚才简单用 AI 搜了下%APPDATA%,发现它应该还是说把写入的文件放到非 C:\Program Files (x86)目录下,但我的问题 2 是想,下载的文件依然保存在 C:\Program Files (x86)目录下,是否我理解有误,再次感谢
    gadfly3173
        5
    gadfly3173  
       1 天前 via Android
    你的需求看起来是存档一类的东西,如果你有便携版即用即走的需求,那么你需要读取程序所在目录(也就是你的 Program Files )里的东西,这个需要管理员。%APPDATA%用来放用户维度的配置。你也可以两种同时启用。
    r3a1ex0n0
        6
    r3a1ex0n0  
       1 天前
    调用 windowsAPI 申请提权, 用户那边弹个 UAC 的框 ,让用户点确认就行了
    thiiadoewjwe
        7
    thiiadoewjwe  
    OP
       1 天前
    @gadfly3173 谢谢回复,主要软件现在也比较大了,估计有大几百万行,涉及功能比较多,每个这种写入操作都改下路径和修改配置文件,任务量会有点大,不过目前看来也只能通过%APPDATA%这样了
    thiiadoewjwe
        8
    thiiadoewjwe  
    OP
       1 天前
    @r3a1ex0n0 感谢回复,这样的话涉及的功能有点多,并且有点影响用户体验,看来只能说把这些相关文件放到其他位置了
    vfs
        9
    vfs  
       1 天前
    安装期间通常是由管理员权限的,可以在这个期间修改你产品目录的修改权限。
    thiiadoewjwe
        10
    thiiadoewjwe  
    OP
       1 天前
    @vfs 谢谢回复,这个思路可以借鉴下,后期我试试
    woniu7
        11
    woniu7  
       1 天前
    "2.如何能安装到 C:\Program Files (x86)的前提下,可以不开管理员权限,也能进行写入操作呢"
    修改 C:\Program Files (x86)的权限,授给当前普通用户写权限。

    "不放在 C:\Program Files (x86),而是放到 C 盘其他目录下"的本质就是其他目录有用户权限,如通常的用户目录下的 AppDate ,而 C:\Program Files (x86)一般是管理员安装,给所有用户读/使用,个人的写数据则放在自己的用户目录下,但你硬要给某个用户就修改目录默认权限。
    penisulaS
        12
    penisulaS  
       1 天前
    所以现在很多新软件都直接安装到 APPDATA 目录下了,各种方便。
    thiiadoewjwe
        13
    thiiadoewjwe  
    OP
       1 天前
    @woniu7 感谢回复,是这样的,所以现在感觉也可以按照 12 楼说的安装时就放到 APPDATA 目录下,直接一劳永逸
    thiiadoewjwe
        14
    thiiadoewjwe  
    OP
       1 天前
    @penisulaS 谢谢回复,这个思路很妙,方便问下都有哪些新软件直接安装到 APPDATA 目录下吗,这样可以借鉴,给其他同事说也有参考性
    b821025551b
        15
    b821025551b  
       1 天前   ❤️ 1
    %APPDATA% 是微软的规范,如果不考虑 XP 系统上运行,不要直接在程序安装路径下写入配置,不过要注意:
    1 、%APPDATA%是在用户下的,存储的数据在用户之间隔离;
    2 、如果需所有用户可读写,需在%ProgramData%创建配置;
    3 、%APPDATA%映射的路径是 AppData\Roaming, 如果不需要同步,应用%LOCALAPPDATA%,也就是 AppData\Local
    b821025551b
        16
    b821025551b  
       1 天前
    @thiiadoewjwe #14 你直接打开这个路径就能看到了,除了 XP 兼容,都这么做。
    penisulaS
        17
    penisulaS  
       1 天前
    @thiiadoewjwe 典型的比如微信,或者安装 vscode (或其他能选用户的应用)的时候选择只安装到本用户,就会安装到本用户的%APPDATA%
    paopjian
        18
    paopjian  
       1 天前
    写入到文档里应该不要权限吧, 我现在文档里一堆.文件夹缓存, APPDATA/Roaming 也是个存放目录
    visper
        19
    visper  
       1 天前
    记得最开始安装 cursor 这些都不给选择直接安装到 app data.麻烦搞得 c 盘不够大。
    tangmanger
        20
    tangmanger  
       1 天前
    1.管理员身份安装运行 可以写
    2.写到用户目录 可以
    3.写入时动态申请管理员权限 开着 UAC 会弹窗
    tangmanger
        21
    tangmanger  
       1 天前
    补充下 %APPDATA% 有一个问题 要看看有没有多用户问题 你要是有 windows 多账户问题也要考虑
    polarisc
        22
    polarisc  
       1 天前
    C:\Users\Public\Documents 这个目录随便读写
    forgottencoast
        23
    forgottencoast  
       1 天前
    @thiiadoewjwe
    我下载到的只要是正经公司开发的软件,近几年都是可以放在%APPDATA%目录下的。
    很多下载的时候分开下载,放在系统目录和放在用户目录分开。
    有些是在安装的时候询问。
    Naykcin
        24
    Naykcin  
       23 小时 20 分钟前
    ```
    现象:软件默认安装到 C:\Program Files (x86),当软件运行时,进行一些写入操作时(比如从云端下载资源到本地,目前也是默认下载到 C:\Program Files (x86)下我的安装目录中),会失败
    ```

    这必然是会失败的,因为这种操作有悖于系统信息安全设计理念。如果 [普通权限用户] 具备向`C:`或`C:\Program Files (x86)`的写权限,会导致提权漏洞,比如以普通用户权限可以替换一些关键的.dll ,使某些默认以管理员运行的进程在启动时被劫持,从而使攻击者获取管理员权限。因此默认情况下普通用户并不具备对这些根目录的写权限,只允许读权限。

    最优解是使用 %APPDATA%。
    b821025551b
        25
    b821025551b  
       23 小时 9 分钟前
    你这个附言气死我了,有没有看我的回帖啊;
    Program Files 是程序安装路径,这个没问题;
    AppData 是用户配置文件,这个也没问题;
    ProgramData ,这个是重点,是全局的配置文件,相当于跨用户的 AppData ,并且可以与 AppData 共存。
    Esec
        26
    Esec  
       22 小时 25 分钟前 via Android
    以前很多程序也选择拉到注册表里,有几个表不需要权限,缺点一样是全局可读,不适合明文存密码,且没法跨平台移植,大部分人没有精到专门备份这玩意做差分分析。更邪门一点的每次启动都拿机器码到远端拉配置,临时放内存里
    busier
        27
    busier  
       22 小时 20 分钟前 via Android
    @Esec 注册表 HKCU 也是用户隔离的。除非你给所有用户都授权管理员!
    thiiadoewjwe
        28
    thiiadoewjwe  
    OP
       21 小时 7 分钟前
    @b821025551b 这次明白了老哥/捂脸,感谢指正补充,上午以为是和 APPDATA 一个意思,再次感谢!
    Koell
        29
    Koell  
       18 小时 41 分钟前
    说到这个,新版 Windows 11 多了一个管理员保护功能( https://techcommunity.microsoft.com/blog/windows-itpro-blog/administrator-protection-on-windows-11/4303482

    如果使用管理员运行的话,%appdata% 会变成 “用户名_ADMIN” 的格式。

    已经碰到好几个软件由于:

    1.更新程序使用了管理员权限

    2.更新完后自动运行程序被动使用了管理员权限运行

    3.使用了管理员运行之后 %appdata% 变为 用户名_ADMIN

    导致运行的程序变为空白配置,还要我退出再使用普通权限运行一下。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5799 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 02:42 · PVG 10:42 · LAX 18:42 · JFK 21:42
    ♥ Do have faith in what you're doing.