吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 642|回复: 5
收起左侧

[求助] python编译后不能正确执行

[复制链接]
cqbscx 发表于 2025-2-6 11:26
本帖最后由 cqbscx 于 2025-2-6 11:28 编辑

以下代码
# 修改计算机名
def change_computer_name(new_name):
    try:
        command = f'wmic computersystem where name="%COMPUTERNAME%" call rename name="{new_name}"'
        subprocess.run(command, shell=True, check=True)
        return True
    except subprocess.CalledProcessError:
        return False


"""按钮点击事件处理"""
    button = buttons[index]
         # 修改计算机名
        new_name = f"{index}"

测试脚本直接运行可以修改计算机名,但是编译EXE后就不行了  
打包命令  pyinstaller --onefile --noconsole --uac-admin --hidden-import=os --clean --upx-dir=c:\upx c:\client.py
右键管理权限运行也一样  求助

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bester 发表于 2025-2-6 11:38
本帖最后由 bester 于 2025-2-6 11:42 编辑

import ctypes
import subprocess
import sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def rename_computer_with_admin_privileges(new_name):
    if is_admin():
        # 如果已经是管理员权限,直接执行 wmic 命令
        command = f'wmic computersystem where name="%COMPUTERNAME%" call rename name="{new_name}"'
        subprocess.run(command, shell=True, check=True)
    else:
        # 如果不是管理员权限,使用 runas 命令以管理员身份运行 wmic 命令
        command = f'runas /noprofile /user:Administrator "wmic computersystem where name=\'%COMPUTERNAME%\' call rename name=\'{new_name}\'"'
        subprocess.run(command, shell=True)

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: python script.py <new_computer_name>")
        sys.exit(1)

    new_name = sys.argv[1]  # 获取命令行参数中的新计算机名称
    rename_computer_with_admin_privileges(new_name)  # 执行重命名操作


可以同时用提权命令&& wmic命令测试一下,不过要先测试一下是否管理员,是否提权等等
 楼主| cqbscx 发表于 2025-2-6 11:56
bester 发表于 2025-2-6 11:38
import ctypes
import subprocess
import sys

感谢指导,我这样做了 测试还是不能执行修改计算机名的操作,不编译可以。
2.PNG
1.PNG
马了顶大 发表于 2025-2-6 12:53
zhangjing1981 发表于 2025-2-6 13:01
import subprocess

def change_computer_name(new_name, admin_password=None):
    """修改计算机名,需要管理员权限."""
    if not new_name:
        return False
   
    try:
        # 使用命令执行
        if admin_password:
            cmd = f'runas /u "{admin_password}" wmic computersystem where name="%COMPUTERNAME%" call rename name="{new_name}"'
        else:
            cmd = f'wmic computersystem where name="%COMPUTERNAME%" call rename name="{new_name}"'
        
        # 运行命令,管理员权限下
        result = subprocess.run(cmd, shell=True, check=False, capture_output=True)
        if result.returncode == 0:
            return True
        else:
            return False
    except Exception as e:
        return False

# 示例使用:
if __name__ == "__main__":
    import sys
    new_name = "新的计算机名"
    if len(sys.argv) == 2 and sys.argv[1].strip() == new_name:
        result = change_computer_name(new_name)
        print("修改成功." if result else "修改失败.")


代码添加了管理员密码参数,支持通过 runas 提供权限。

使用 echo %COMPUTERNAME% 命令查看是否存在;
确认下 依赖存在 pip install pywin32 wmic
打包pyinstaller --onefile --noconsole --uac-admin --hidden-import=os,subprocess,pywin32,wmi --clean --upx-dir=c:\upx c:\client.py
cuuemo 发表于 2025-2-6 14:11
--noconsole 去掉看看什么报错
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-6-17 06:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表