2012-05-21 1 views
5

में डिफ़ॉल्ट विंडोज एक्जिक्यूटिव कॉल करें, मैंने अपने सी कोड में certmgr.exe पर कॉल करने के लिए system() फ़ंक्शन का उपयोग किया। एक बार जब मैं अपना निष्पादन योग्य प्रारंभ करता हूं, तो कमांड प्रॉम्प्ट प्रमाणपत्र सफलतापूर्वक इंस्टॉल होने पर दिखाई देता है।सी प्रोग्राम

लेकिन मैं कमांड को खोला नहीं चाहता हूं। उसको कैसे करे??

"exe के" सी में भाषा कॉल करने के लिए उपलब्ध किसी भी अन्य तरीकों से ..

धन्यवाद ,,,

+0

के बजाय आपके प्रवेश बिंदु के रूप में करने में सक्षम होना चाहिए ... सभी को उत्तर दिया गया ... – 2vision2

+0

शैलएक्सक्यूट (न्यूल, न्यूल, " \\ प्रमाणपत्र \\ CertMgr.exe ","/add। \\ प्रमाणपत्र \\ MYcertificate.cer/s/r localMachine root ", NULL, SW_HIDE) मैं उपरोक्त आदेश का उपयोग करता हूं और अभी भी एक कंसोल विंडो मेरे exe पर क्लिक करने पर खुलती है .... – 2vision2

उत्तर

5

विंडोज पर ऐसा करने का सबसे आसान तरीका ShellExecute पर कॉल करना है। यह सुनिश्चित करने के लिए कि कोई कंसोल विंडो नहीं दिखाया गया है, SW_HIDE पास करें।

आप वैकल्पिक रूप से CreateProcess का उपयोग कर सकते हैं लेकिन यह कॉल करने के लिए थोड़ा सा चालक है। कंसोल विंडो को दबाने के लिए CREATE_NO_WINDOW ध्वज का उपयोग करें।

+0

शैलएक्सक्यूट (न्यूल, न्यूल, "। \\ प्रमाणीकरण \\ CertMgr.exe", "/ add। \\ प्रमाणपत्र \\ MYcertificate.cer/s/r localMachine root", NULL, SW_HIDE) मैं उपयोग करता हूं उपरोक्त आदेश और अभी भी एक कंसोल विंडो मेरे exe पर क्लिक करने पर खुलती है .... – 2vision2

+0

CREATE_NO_WINDOW ध्वज के साथ CreateProcess के बारे में क्या। कभी-कभी यह एकमात्र समाधान है। –

+0

या मैंने createProcess के साथ फिर से एक कंसोल विंडो प्राप्त करने की कोशिश की है .. CreateProcess ("। \\ प्रमाणपत्र \\ CertMgr.exe", "/ add। \\ प्रमाणपत्र \\ MYcertificate.cer/s/r localMachine root", NULL , NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, और si, &pi); – 2vision2

3

पृष्ठभूमि में चुपचाप cmd.exe चलाने के लिए/कोई तरीका नहीं है।

एक निर्धारित कार्यक्रम या कमांड को चलाने के लिए एक अलग विंडो शुरू होता है: हालांकि, start आदेश और उसके संबंधित /B विकल्प लग रहे हो।

स्टार्ट ["शीर्षक"] [/ डी पथ] [/ I] [/ MIN] [/ MAX] [/ SEPARATE |/साझा] [/ कम |/सामान्य |/उच्च |/वास्तविकता |/ABOVENORMAL |/BELOWNORMAL] [/ AFFINITY] [/ WAIT] [/ B] [आदेश/कार्यक्रम] [मापदंडों]

[...] बी प्रारंभ आवेदन एक नई विंडो बनाने के बिना। एप्लिकेशन में^सी हैंडलिंग अनदेखा है। जब तक कि एप्लिकेशन ^ सी प्रसंस्करण को सक्षम नहीं करता है,^ब्रेक एप्लिकेशन को बाधित करने का एकमात्र तरीका है।

आप CreateProcess के साथ बेहतर हो जाएंगे।

2

WINAPI में CreateProcess() फ़ंक्शन है जिसका उपयोग आप किसी अन्य निष्पादन योग्य चलाने के लिए कर सकते हैं। इस समारोह जो एक तंत्र उपलब्ध करा सकता है करने के लिए कई तर्क हैं certmgr.exe के कंसोल विंडो (process creation flags तर्क से) से दिखाई नहीं दे के लिए:

CREATE_NO_WINDOW प्रक्रिया एक सांत्वना आवेदन एक कंसोल विंडो के बिना कि रन किया जा रहा है है । इसलिए, एप्लिकेशन के लिए कंसोल हैंडल सेट नहीं है।

4

मैं कुछ भी चलाने के लिए इस प्रणाली का उपयोग नहीं होता .. ऐसा क्यों है: http://www.cplusplus.com/forum/articles/11153/

आप अनुप्रयोगों http://msdn.microsoft.com/en-us/library/bb762153(VS.85).aspx पास SW_HIDE चलाने के लिए ShellExecute उपयोग कर सकते हैं और आपका काम हो।

0

this link में T.E.D द्वारा उत्तर दिया मुझे अंत में मदद की ...

यह भविष्य में कुछ एक मदद मिल सकती है ...

दूसरों CreateProcess का उपयोग कर उल्लेख किया है (शायद उत्पादन रीडायरेक्ट करने के लिए)।ऐसा होने का सामान्य कारण यह है कि आप "सिस्टम" के माध्यम से चल रहे प्रोग्राम को कमांड लाइन प्रोग्राम है। यदि यह कुछ है जो आप स्वयं संकलित करते हैं, तो आप इसके बजाय एक जीयूआई प्रोग्राम के रूप में इसे बनाकर कंसोल विंडो से छुटकारा पा सकते हैं। आपको Windows.h को शामिल करके और WinMain() का उपयोग मुख्य()

+0

mingw का उपयोग कर कंपाइलर और खोल निष्पादन के रूप में मुख्य रूप से शुरुआती बिंदु के रूप में मुख्य रूप से एक कंसोल खोलता है। मैंने इसे WinMain() में बदल दिया और -विंडोज स्विच के साथ संकलित किया। – 2vision2