You need to enable JavaScript to run this app. 如何使用Python在Windows中新建C:\Projects文件夹共享并为Everyone设置只读权限
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python在Windows中新建C:\Projects文件夹共享并为Everyone设置只读权限

Windows下用Python创建指定只读共享的可用方案

你搜不到大量纯Python实现方案的核心原因是:Windows文件夹共享是操作系统层面的系统能力,Python本身没有内置对应的跨平台操作接口,所有实现本质都是调用Windows自带的命令行工具或者原生系统API,不存在脱离Windows能力的纯Python共享逻辑。
下面是两种经过验证、可以从0完成共享创建(而非修改已有共享权限)的实现路径:

方法1:调用系统内置net share命令(零额外依赖,新手友好)

这是最直接的实现方式,不需要安装任何第三方Python库,Windows全版本自带对应的命令行工具,语法原生支持指定用户和权限等级。
实现逻辑:

  • 所有操作必须以管理员身份运行Python,否则会触发权限不足报错
  • 命令核心参数:指定共享名对应本地路径,通过/GRANT参数直接给Everyone用户授予只读权限
    对应可运行的代码:
import subprocess
import sys
import os
import ctypes

# 自动检查并提权到管理员模式
if not ctypes.windll.shell32.IsUserAnAdmin():
    ctypes.windll.shell32.ShellExecuteW(
        None, "runas", sys.executable, " ".join(sys.argv), None, 1
    )
    sys.exit()

# 确认目标文件夹存在
target_folder = r"C:\Projects"
if not os.path.isdir(target_folder):
    print(f"目标文件夹{target_folder}不存在,创建共享失败")
    sys.exit()

# 执行共享创建命令
share_name = "Projects"
cmd = f'net share {share_name}="{target_folder}" /GRANT:Everyone,READ /REMARK:"本地项目文件夹共享"'
run_result = subprocess.run(cmd, capture_output=True, text=True, shell=True)

if run_result.returncode == 0:
    print("共享创建完成,Everyone用户已被授予只读权限")
else:
    print(f"操作失败,系统返回信息:{run_result.stderr.strip()}")

方法2:通过pywin32调用Windows原生共享API

如果不想通过命令行拼接实现,可以通过pywin32库直接调用Windows的NetShareAdd系统接口,这也是Windows创建网络共享的底层原生接口——你之前搜到的修改已有共享权限的帖子,本质就是这个接口的延伸用法,只是调用的是权限修改分支,而非共享创建分支。
操作前置要求:

  • 先安装依赖:pip install pywin32
  • 同样需要以管理员身份运行Python脚本
    对应代码:
import win32net
import win32netcon
import win32security

# 基础共享配置
share_config = {
    "netname": "Projects",
    "path": r"C:\Projects",
    "remark": "本地项目文件夹共享",
    "type": win32netcon.STYPE_DISKTREE,
    "max_uses": -1,  # 不限制同时连接数
    "current_uses": 0,
}

# 配置Everyone用户的只读访问权限
everyone_sid = win32security.ConvertStringSidToSid("S-1-1-0")
read_right = win32security.FILE_GENERIC_READ
acl = win32security.ACL()
acl.AddAccessAllowedAce(win32security.ACL_REVISION, read_right, everyone_sid)

# 写入安全描述符
sd = win32security.SECURITY_DESCRIPTOR()
sd.SetSecurityDescriptorDacl(True, acl, False)
share_config["security_descriptor"] = sd

# 发起共享创建请求
try:
    win32net.NetShareAdd(None, 502, share_config)
    print("共享创建完成,Everyone用户已被授予只读权限")
except win32net.error as err:
    err_code, _, err_msg = err.args
    print(f"操作失败,错误码{err_code}:{err_msg}")

常见踩坑说明

  • 权限分层问题:共享层设置的Everyone只读,不代表NTFS文件系统层面的权限匹配,如果目标文件夹的NTFS权限没有给Everyone开放读取权限,其他用户就算能看到共享也无法打开文件
  • 已有共享冲突:如果系统已经存在和你设置的共享名同名的共享,两种方法都会抛出错误,需要先执行net share 共享名 /delete删除旧共享
  • 匿名访问限制:Win10/Win11默认关闭了匿名访问共享的开关,如果需要非域环境下的公开只读访问,还需要在本地安全策略中开启“网络访问:让Everyone权限应用于匿名用户”选项,该设置无法通过代码直接修改
  • 常见错误码对照:
    • 错误码5:未使用管理员权限运行脚本
    • 错误码2118:同名共享已经存在
    • 错误码2102:目标文件夹路径不存在

内容的提问来源于stack exchange,提问作者Noamm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 04:12:11