- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以,我编写了一个在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/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!