答案1
您可以修改注册表,将 Python 文件的以管理员身份运行选项添加到上下文菜单中。
具体操作如下:
步骤1:打开提升的 PowerShell:
Win+ →R类型powershell
→ Ctrl++ShiftEnter
第2步:粘贴这些命令:
$python=where.exe Python.exe
cmd /c "assoc .py=Python.File"
cmd /c $('ftype Python.File="{0}" "%1" "%*"' -f $python)
New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT
Set-ItemProperty -Path "HKCR:\.py" -Name "(Default)" -Type String -Value "Python.File"
Set-ItemProperty -Path "HKCR:\.py" -Name "Content Type" -Type String -Value "text/plain"
New-Item -Path "HKCR:\Python.File\shell" -ErrorAction SilentlyContinue | Out-Null
New-Item -Path "HKCR:\Python.File\shell\runas" -ErrorAction SilentlyContinue | Out-Null
Set-ItemProperty -Path "HKCR:\Python.File\shell\runas" -Name "(Default)" -Type String -Value "Run as Administrator"
Set-ItemProperty -Path "HKCR:\Python.File\shell\runas" -Name "HasLUAShield" -Type String -Value '""'
New-Item -Path "HKCR:\Python.File\shell\runas\command" -ErrorAction SilentlyContinue | Out-Null
$Command='cmd.exe /S /K "{0}" \"%1\" %*' -f $python.replace("\","\\")
Set-ItemProperty -Path "HKCR:\Python.File\shell\runas\command" -Name "(Default)" -Type String -Value $Command
Set-ItemProperty -Path "HKCR:\Python.File\shell\runas\command" -Name "DelegateExecute" -Type String -Value '""'
那么工作就完成了,享受吧。
第一行使用 where.exe 来查找 Python.exe 的位置,如果 Python.exe 在 PATH 环境变量中,问题是如果有多个 Python.exe,它的结果就不是一行字符串,而是多行,尝试运行:
where.exe Python.exe
要检查是否有多行,如果只有一行,请使用:
$Python=where.exe Python.exe
如果有多行,则使用:
$Python=where.exe Python.exe | Select-Object -First 1
或者手动提供所需 Python 的路径,例如:
$Python="C:\Program Files\Python39\Python.exe"
请注意,您可以使用 where.exe 获取其路径,并且在 PowerShell 中,即使字符串不包含空格,也必须使用引号。
第二行和第三行修复了 .py 文件的 openwith 关联,问题是 assoc 和 ftype 是 cmd 命令,而 C:\Windows\System32 中没有它们的可执行文件,因此最安全的方法是使用 cmd /c 来运行它们,但是我使用的是 PowerShell 7.1.1,我依稀记得曾经成功使用过其中一个没有 cmd /c 部分,请运行:
Test-Path C:\Windows\System32\assoc.exe
Test-Path C:\Windows\System32\ftype.exe
告诉我哪一个是可执行文件,如果 Test-Path 返回 True 则该文件存在,否则返回 False,这意味着可执行文件不存在并且是 cmd.exe 的内置函数。
很抱歉,但我现在和接下来的一周都无法使用电脑,所以我无法测试我的代码,我写这篇文章时使用的是 Android 手机,因为我要去乡下的外公外婆家过农历新年,我现在所在的地方没有电脑。
我猜你在 $Env:Path 中只有一个 Python.exe,因为 (where.exe Python.exe)[0] 的结果是 [System.Char],而且我猜它的值是 C,尝试运行:
(where.exe Python.exe)[0]
要说我是否正确,这是出乎意料的,但如果只有一行,那么它就是一个 [System.String] 对象,如果有多行,那么结果就是一个 [Array],特别是 [String[]],括号在 PowerShell 中有多重含义,这里它与 [0] 一起使用,明确地表示 [Array] 中的第一个元素(程序使用 0 作为索引的开头而不是 1),因此括号内的内容被视为 [Array],因为只有一个字符串,它被转换为 [System.Char] 数组 [Char[]] 以使其可索引。
答案2
请尝试以下步骤:
为 python.exe 创建快捷方式
将快捷方式目标更改为其他内容
例如 d:\xxx...\python.exe (your_script.py)(你的文件路径)
单击快捷方式属性面板中的“高级...”,然后单击选项“以管理员身份运行”