You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pywin32修改Windows下MP4文件属性遇权限拒绝错误求助

解决pywin32修改MP4属性时的"Access Denied"错误

你遇到的Access Denied错误是因为默认调用SHGetPropertyStoreFromParsingName时,属性存储处于只读模式,无法执行写入操作。要解决这个问题,需要在获取属性存储时显式指定读写权限。

解决方案步骤:

  • 初始化COM环境(确保win32com组件正常工作)
  • 获取属性存储时传入GPS_READWRITE标志,开启读写权限

修改后的完整代码:

import pythoncom
import os
from win32com.propsys import propsys

# 初始化COM环境
pythoncom.CoInitialize()

file_path = os.path.abspath('file.mp4')
pk = propsys.PSGetPropertyKeyFromName("System.Title")

# 传入GPS_READWRITE标志,获取可读写的属性存储
ps = propsys.SHGetPropertyStoreFromParsingName(
    file_path,
    None,
    propsys.GPS_READWRITE,
    propsys.IID_IPropertyStore
)

# 读取原有属性
details = ps.GetValue(pk).GetValue()
print(f"原有Title属性:{details}")

# 设置新属性值
newValue = propsys.PROPVARIANTType('ok')
ps.SetValue(pk, newValue)
ps.Commit()
print("属性修改成功")

# 验证修改结果
ps_refresh = propsys.SHGetPropertyStoreFromParsingName(
    file_path,
    None,
    propsys.GPS_READWRITE,
    propsys.IID_IPropertyStore
)
updated_details = ps_refresh.GetValue(pk).GetValue()
print(f"修改后的Title属性:{updated_details}")

# 释放COM资源
pythoncom.CoUninitialize()

关键说明:

  1. COM初始化:pythoncom.CoInitialize()是win32com操作的必要步骤,确保COM组件正确初始化;操作完成后用CoUninitialize()释放资源。
  2. 读写权限标志:propsys.GPS_READWRITE是Windows属性系统的枚举值,明确告诉API需要获取可读写的属性存储实例,替代默认的只读模式。
  3. 其他注意事项:确保目标MP4文件本身没有设置只读属性,且当前运行脚本的用户对文件所在目录有写入权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:08:17