6

我试图在启动时调用一个可执行文件,它将调用另一个可执行文件本身。对于第一部分,我只是将可执行文件的路径添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run,它可以工作,我的可执行文件在启动时被调用。

后者包含以下几行:

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
proc = subprocess.Popen(command, startupinfo=startupinfo)

但是,计算机启动时会弹出命令外壳 (cmd)。一切正常,但它是可见的而不是隐藏的......所以基本上,我该如何隐藏这个命令外壳?

使用时ProcessExplorer,我有以下层次结构:

+ System
|_ Interrupts
|_ smss.exe
    |_ some processes...
+ explorer.exe
    |_ some processes...
|_ MYSCRIPT.EXE

这是我尝试实现的顺序:

  • 我创建了一个 ISO 文件,其中包含我想在 VM 上运行的所有 Python 可执行文件。其中一个 ( master.exe) 呼叫其他人。
  • 我创建了一个自动挂载后者的虚拟机
  • 准备好的虚拟机有一个计划任务,它调用D:\master.exe
  • master.exe(在我们这里不关心的其他任务中)增加了D:\myscript.exe价值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
  • 虚拟机重新启动
  • D:\myscript.exe正在运行(并且它工作正常并且有人参与),但它确实在命令提示符下运行,我希望它是不可见的。
4

5 回答 5

3

这是 Python 程序员遇到的典型问题——因此,Python 本身提供了解决方案。它已经被问过很多次了,例如,here,但对你来说,问题有点复杂。

这完全取决于您是使用python.exe还是pythonw.exe运行脚本。对于第一个,打开了一个控制台,对于第二个则没有。

当您使用已编译的脚本时,您必须告诉“编译器”您要使用哪个版本。假设您使用的是 py2exe,您可以在 SO 上查看这篇文章。这里详细说明如何进行。

于 2013-01-21T12:57:26.697 回答
1

正在打开的控制台窗口可能属于运行脚本的 Python 进程。向我们展示注册表中运行您的脚本的条目。

于 2013-01-15T13:37:43.210 回答
0

如果您运行控制台程序,Windows 将创建一个控制台窗口。“python.exe”是一个控制台程序。

如果您不想要控制台窗口,可以使用“pythonw.exe”而不是“python.exe”运行 Python 脚本。

于 2013-01-21T12:15:33.223 回答
0

你可以编译成exe格式。当我遇到这个问题时,我使用py2exe将 python 文件编译为不可见的可执行文件。

您所要做的就是更改 setup.py 文件(用于编译),从

setup(console=['__main__.py'], options={"py2exe":{"includes":["sip"]}})

setup(windows=['__main__.py'], options={"py2exe":{"includes":["sip"]}})
于 2015-09-17T05:25:29.503 回答
0

我有同样的问题,我使用了 Pyinstaller

Pyinstaller 是一个智能的跨平台工具,可以将 .py 文件编译成独立的可执行文件。

通过以下方式安装它:

pip install pyinstaller(更多信息在这里

使用以下命令隐藏控制台(使您的脚本成为一个进程):

pyinstaller yourfilename.py -F --windowed

(使用“-F”标志,您将获得一个 .exe 文件,使用“--windowed”标志,控制台将被隐藏)

于 2018-04-03T19:43:16.367 回答