2009-07-01 6 views
5

VC++でプロセスを作成する方法を教えてもらえますか?そのプロセスではWindowsでC++でプロセスを作成するには?

regasm.exe testdll /tlb:test.tlb /codebase 

コマンドを実行する必要があります。

+1

詐欺ではありません。他の質問は、CreateProcessがそれを行う唯一の方法であることを前提としています。これはもっと自由である。記録のために、提案されたdupeはhttp://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executableでした - 私はそれを取り出しました私はコンテンツを編集するのが悪いフォームだと思っています。私はそれがコメントに入れられるべきだと信じています。それが欺瞞として閉じられるならば、それ自体がそれを質問に加えます。 – paxdiablo

答えて

4

同期コマンド(実行と待機)を実行したい場合は、system()コール(hereを参照)を実行するだけです。はい、私はそれがLinuxのページだが、Cは標準ではありませんか? :-)

実行する方法(同期/非同期)と多くのオプション、CreateProcess()hereを参照)とその兄弟をより細かく制御するには、 Windowsプラットフォームに結びついています(これはすぐにはあなたの心配ではありません)。

3

プロセスを生成するためにCreateProcess()を使用し、戻り値が正常に開始されたことを確認してから、プロセスとスレッドのハンドルを閉じるか、WaitForSingleObject()を使用して終了してハンドルを閉じます。

10

regasm.exeは(アセンブリ登録ツール)Windowsレジストリの変更、あなたがregasm.exeとして昇格プロセスを開始したいので、もしあなたが、次のコードを使用することができますを行います

#include "stdafx.h" 
#include "windows.h" 
#include "shellapi.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
     SHELLEXECUTEINFO shExecInfo; 

     shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 

     shExecInfo.fMask = NULL; 
     shExecInfo.hwnd = NULL; 
     shExecInfo.lpVerb = L"runas"; 
     shExecInfo.lpFile = L"regasm.exe"; 
     shExecInfo.lpParameters = L"testdll /tlb:test.tlb /codebase"; 
     shExecInfo.lpDirectory = NULL; 
     shExecInfo.nShow = SW_NORMAL; 
     shExecInfo.hInstApp = NULL; 

     ShellExecuteEx(&shExecInfo); 

     return 0; 
} 

shExecInfo.lpVerb = L"runas"プロセスが上昇して開始されることを意味し特権。あなたがしたくない場合は、shExecInfo.lpVerbをNULLに設定するだけです。しかしVistaまたはWindows 7では、Windowsレジストリの一部を変更するには管理者権限が必要です。

+0

それは上よりもうまく動作します。しかし一方で、どのユーザの下で実行する必要があるのか​​を尋ねています。 このプログラムについて説明できますSHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

私はnullを "実行する"ように変更した後、尋ねることなく動作します。 okこのLは何を意味し、このプロセスはどのように作成されましたか? – Cute

+0

LはUnicode文字列です。 –

関連する問題