【问题标题】:call default windows executables in C program在 C 程序中调用默认的 windows 可执行文件
【发布时间】:2023-03-13 20:51:01
【问题描述】:

我使用system() 函数在我的C 代码中调用certmgr.exe。 一旦我启动我的可执行文件,就会出现一个命令提示符,显示证书已成功安装。

但我不想打开命令提示符。该怎么做??

在 C 语言中调用“exe”的任何其他方法..

谢谢,,,

【问题讨论】:

  • 感谢大家的回复...全部赞成...
  • ShellExecute(NULL, NULL, ".\\certifications\\CertMgr.exe", "/add .\\certifications\\MYcertificate.cer /s /r localMachine root", NULL, SW_HIDE )我使用上面的命令,单击我的 exe 时仍然会打开一个控制台窗口....

标签: c windows winapi


【解决方案1】:

在 Windows 上执行此操作的最简单方法是调用 ShellExecute。传递SW_HIDE 以确保不显示任何控制台窗口。

您也可以使用CreateProcess,但调用起来有点棘手。使用CREATE_NO_WINDOW 标志来抑制控制台窗口。

【讨论】:

  • ShellExecute(NULL, NULL, ".\\certifications\\CertMgr.exe", "/add .\\certifications\\MYcertificate.cer /s /r localMachine root", NULL, SW_HIDE )我使用上面的命令,单击我的 exe 时仍然会打开一个控制台窗口....
  • 带有 CREATE_NO_WINDOW 标志的 CreateProcess 怎么样。有时这是唯一的解决方案。
  • 是的,我尝试使用 createProcess 也再次获得控制台窗口.. CreateProcess(".\\certifications\\CertMgr.exe", "/add .\\certifications\\MYcertificate.cer /s /r localMachine root", NULL, NULL, FALSE,CREATE_NO_WINDOW, NULL, NULL, &si, &pi );
  • 看起来 CertMgr 正在创建一个控制台窗口,尽管您如此。将此代码与其他一些控制台应用程序一起尝试,您应该会看到它们仍然隐藏。
  • cermgr 在不打开控制台窗口的情况下与 python 代码一起工作... subprocess.Popen('.\certifications\CertMgr.exe /add .\certifications\\MYcertificate.cer /s /r localMachinetrustedPublishers ', shell=True)
【解决方案2】:

我不会使用系统来运行任何东西。这就是为什么:http://www.cplusplus.com/forum/articles/11153/

您可以使用 ShellExecute 运行应用程序 http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx 传递 SW_HIDE 即可。

【讨论】:

    【解决方案3】:

    无法以静默方式/在后台运行cmd.exe。但是,请查看start 命令及其关联的/B 选项:

    启动一个单独的窗口以运行指定的程序或命令。

    START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /共享] [/低| /正常 | /高 | /实时 | /高于正常 | /低于一般] [/AFFINITY ] [/WAIT] [/B​​] [命令/程序] [参数]

    [...] B 启动应用程序而不创建新窗口。这 应用程序忽略了 ^C 处理。除非申请 启用^C处理,^Break是唯一的中断方式 应用程序。

    CreateProcess 会更好。

    【讨论】:

      【解决方案4】:

      WINAPI 有一个CreateProcess() 函数,您可以使用它来运行另一个可执行文件。此函数有几个参数,可能提供了一种不显示certmgr.exe 的控制台窗口的机制(来自process creation flags 参数):

      CREATE_NO_WINDOW 该进程是一个在没有控制台窗口的情况下运行的控制台应用程序。因此,未设置应用程序的控制台句柄。

      【讨论】:

        【解决方案5】:

        T.E.D 在this link 的回答终于帮助了我......

        这可能对将来的某些人有所帮助...

        其他人提到过使用 CreateProcess(大概是为了重定向输出)。发生这种情况的一般原因是您通过“系统”运行的程序是命令行程序。如果它是您自己编译的东西,您可以通过将其构建为 GUI 程序来摆脱控制台窗口。您应该能够通过包含 Windows.h 并使用 WinMain() 作为入口点而不是 main() 来做到这一点

        【讨论】:

        • 我正在使用 mingw 作为编译器,并且 shell 执行仍然会打开一个以 main 作为起点的控制台。我将其更改为 WinMain() 并使用 -mwindows 开关进行编译。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-23
        • 2013-09-04
        • 2012-09-30
        • 1970-01-01
        • 2018-04-02
        • 1970-01-01
        相关资源
        最近更新 更多