gpt4 book ai didi

python - 将文件与 python 中的程序关联起来

转载 作者:太空宇宙 更新时间:2023-11-03 18:56:55 25 4
gpt4 key购买 nike

所以,我编写了一个在Windows7/8/Vista/XP系统启动时运行的python应用程序。第一次运行时,我希望它将一些文件类型/扩展名与系统上的某个程序相关联。目前,我是这样完成的:

import win32com.shell.shell as shell

def runAssoc():
shell.ShellExecuteEx(
lpVerb="runas",
lpFile='c:\\Users\\myUser\\assoc.bat')

问题是,当从启动运行时,有时会无法工作。我读过here ShellExecuteEx 不会将其错误输出到调用进程,因此我看不到那一端出现了什么问题,并且还阅读了 there 给出的文章lpVerb="runas" 通常被认为是不好的做法。

我的 assoc.bat 需要管理员批准,因为它的编写方式如下:

assoc .txt=myNotepad
assoc .hello=myNotepad
ftype myNotepad="C:\Windows\system32\notepad.exe" "%%1"

(这里我将 Windows 附带的 Microsoft 记事本与“txt”和“hello”扩展名相关联。这当然没有意义,但却是一个很好的例子。)

据我所知,Windows 不提供命令行工具,允许我们将文件扩展名与程序关联起来仅适用于当前用户(这对于我想要实现的目标来说效果很好)。
On this article我读到 assoc 影响 Windows 安装中每个用户帐户使用的注册表区域,而不是无需管理员权限即可写入的 HKEY_CURRENT_USER

我读了另一个答案 here建议检查 sys.argv[-1] != "asadmin",但每次我的应用程序运行时 sys.argv 似乎都是一个空数组。

1) 我能否确保 ShellExecuteEx 运行并在需要时提示管理员权限?

2)也许有一种方法可以创建一个批处理文件,仅将这些扩展名与当前用户关联?然后,我不需要使用“runas”参数,该参数被认为是错误的来源。

一点旁注:实际上,我“以编程方式”即时构建了这个批处理文件,但这里不讨论这一点,因为它与问题并不真正相关。

最佳答案

可能最简单的方法是创建一个 .reg 文件并执行,您可以直接在 reg 文件中写入所需的注册表项。例如:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Classes\.hello]
@="txtfile"

您显然也可以创建 myNotepad 类型。您可以关联,然后使用regedit来制作reg文件(选择 key 和rmb +导出)如果您使用:您可以告诉window以静默方式安装reg:

regedit -s your_reistration_file.reg

现在您可以使用 ShellExecuteEx 调用上面的行。请注意,用户可能无权使用 reg 文件编辑注册表。

您还可以直接在 python 中编辑注册表,这是上面的示例,请参阅 winreg 文档以获取更多信息:

import _winreg #just winreg in Python 3

key = _winreg.OpenKey(
_winreg.HKEY_CURRENT_USER,
r"Software\Classes"
)

hello = _winreg.CreateKeyEx(key, ".hello")
_winreg.SetValue(hello, '', _winreg.REG_SZ, 'txtfile')

关于python - 将文件与 python 中的程序关联起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com