windows 开发,软件在 C 盘,是否可以绕过管理员权限来进行写入 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
thiiadoewjwe
V2EX    Windows

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

  •  
  •   thiiadoewjwe 5 天前 2615 次点击
    技术栈: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 条附言    5 天前
    感谢各位大佬的建议,我个人总结如下,希望能帮到大家

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

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

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

    最优解是使用 %APPDATA%。
    b821025551b
        25
    b821025551b  
       5 天前
    你这个附言气死我了,有没有看我的回帖啊;
    Program Files 是程序安装路径,这个没问题;
    AppData 是用户配置文件,这个也没问题;
    ProgramData ,这个是重点,是全局的配置文件,相当于跨用户的 AppData ,并且可以与 AppData 共存。
    Esec
        26
    Esec  
       5 天前 via Android
    以前很多程序也选择拉到注册表里,有几个表不需要权限,缺点一样是全局可读,不适合明文存密码,且没法跨平台移植,大部分人没有精到专门备份这玩意做差分分析。更邪门一点的每次启动都拿机器码到远端拉配置,临时放内存里
    busier
        27
    busier  
       5 天前 via Android
    @Esec 注册表 HKCU 也是用户隔离的。除非你给所有用户都授权管理员!
    thiiadoewjwe
        28
    thiiadoewjwe  
    OP
       5 天前
    @b821025551b 这次明白了老哥/捂脸,感谢指正补充,上午以为是和 APPDATA 一个意思,再次感谢!
    Koell
        29
    Koell  
       5 天前
    说到这个,新版 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     2561 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 10:49 PVG 18:49 LAX 02:49 JFK 05:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86