C++ 如何在c++;没有窗户
我用它来调用powershell,但即使我使用CREATE_NO_窗口,这段代码也是我以前的system()调用的C&p。但它不起作用。 更新的代码(仍不工作): 首先是线路C++ 如何在c++;没有窗户,c++,powershell,C++,Powershell,我用它来调用powershell,但即使我使用CREATE_NO_窗口,这段代码也是我以前的system()调用的C&p。但它不起作用。 更新的代码(仍不工作): 首先是线路 LPWSTR command=(_TEXT("powershell.exe -Executionpolicy bypass -File \"%deploy%\\psscript.ps1\" -Filename psscript -Folderpath \"%HOMEDRIVE%\\deployment\"")); …有三
LPWSTR command=(_TEXT("powershell.exe -Executionpolicy bypass -File \"%deploy%\\psscript.ps1\" -Filename psscript -Folderpath \"%HOMEDRIVE%\\deployment\""));
…有三个严重问题:
是一个Microsoft宏,它扩展为LPWSTR
,而初始值设定项则简化为一个文本,即wchar\u t*
字符数组。在C++ 98中已经删除了<代码> const (第一个C++标准),并且在C++ 11中被删除了->强>无效/ <强> >常量
。
是一个Microsoft宏,如果定义了宏符号\u TEXT
,它会在文本中添加前缀\u UNICODE
。它曾经是提供与Windows95兼容的方案的一部分,直到2000年引入Unicode层。在这个方案过时16年后,我们现在已经了,最重要的是,如果您不定义L
,您将得到一个编译错误,因为您没有按照要求在任何地方使用该方案\u UNICODE
- 字符串中的
是用于扩展环境变量的命令解释器语法。我不是100%确定,只有99.8%左右,但据我记忆所及,%HOMEDRIVE%
没有这个功能CreateProcess
wchar_t command[] = L"notepad.exe";
请注意,CreateProcess
要求它是可写的。因此,即使使用接受原始声明的编译器,您也会在未定义行为中退出,代码可能会试图修改文本
通过在构造命令字符串之前扩展该变量,可以解决环境变量问题。为此,我将使用std::wstring
。它有助于连接等
然后,电话
CreateProcess(NULL, command, NULL, NULL, NULL, CREATE_NO_WINDOW, NULL, NULL, NULL, NULL);
…为返回进程和线程句柄的参数以及指定启动信息的参数提供NULL
。那是行不通的。阅读文档
小贴士:
CreateProcess
时考虑到一些简单的任务,例如运行记事本,您可以学习如何以较少的工作量正确调用它ShellExecute
或ShellExecuteEx
比基本的CreateProcess
更可取(免责声明:我没有检查它们是否支持无窗口执行,但它们很可能支持)您是否尝试过使用
-WindowStyle Hidden
选项?是的,仍然不起作用。我发现了一个错误,之前有一个对powershell的system()调用。上面的代码甚至不起作用=/Initialization指针指向非-const
,从C++11开始,使用文本无效,该规则集管理该位。根据Microsoft的文档,提供0的CreateProcess
参数中至少有两个不接受0,这是管理该位的规则集。一定要阅读文档。
CreateProcess(NULL, command, NULL, NULL, NULL, CREATE_NO_WINDOW, NULL, NULL, NULL, NULL);