2009-07-01 24 views
5

VC++'da nasıl bir süreç yaratılacağını bana söyleyebilir mi? Bu işlem içinWindows'ta C++'da nasıl bir süreç oluşturulur?

komutunu çalıştırmam gerekiyor.

+1

Hiç para değil. Diğer soru ise, bunu gerçekleştirmenin tek yolu olan CreateProcess'un olduğunu varsayar. Bu daha açık uçlu. Kayıt için önerilen dupe, http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable - Çıkarıldım Sorunun nedeni, içeriği düzenlemek için kötü bir form olduğunu düşünüyorum. Bunun yorumlara konması gerektiğine inanıyorum. Eğer bir dupe olarak kapanırsa, o zaman SO'nun kendisi buna ekleyecektir. – paxdiablo

cevap

4

Sadece eşzamanlı bir komut yürütmek istiyorsanız (koş ve bekle), en iyi bahsinizi çalıştırmak için system() numaralı telefonu arayın (bkz. here). Evet, bunun bir Linux sayfası olduğunu biliyorum ama C bir standart, değil mi? :-)

Neyin işe yarayacağını, nasıl çalıştığını (sync/async) ve çok daha fazla seçeneği (CreateProcess() (bkz. here) ve kardeşleri hakkında daha ayrıntılı denetim için muhtemelen daha iyi olacaksınız. Windows platformuna bağlı (size doğrudan ilgisi olmayabilir).

3

İşlemi oluşturmak için CreateProcess() öğesini kullanın, işlemin tamamlandığından emin olmak için dönüş değerini kontrol edin, ardından tutamaçları işleme ve iş parçacığına kapatın veya WaitForSingleObject() öğesini bitirene kadar bekleyin ve sonra tutamaçları kapatın.

10

regasm.exe Eğer regasm.exe olarak yükseltilmiş süreç aşağıdaki kodu kullanabilirsiniz başlamak istiyorum eğer öyleyse (derleme kayıt Aracı), Windows Kayıt değişiklikler yapar: süreç yükselmiş ile başladı olacağını

#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"

demektir ayrıcalıkları. Bunu istemiyorsanız, NULL için shExecInfo.lpVerb'u ayarlayın. Ancak, Vista veya Windows 7 altında, Windows Kayıt Defterinin bazı bölümlerini değiştirmek için yönetici hakları gereklidir.

+0

Yukarıdaki Oldukça Güzel Çalışıyor.Ama bu arada hangi kullanıcı altında çalıştırmak zorunda olduğunu soruyor .. Bu prog hakkında açıklayabilir SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

Ben null için l "run as" olarak değiştirdim ve sormadan çalışır. tamam bu L'nin ne anlama geldiğini ve bunun nasıl oluşturulduğunu açıklıyor? – Cute

+0

L, Unicode dizesi içindir. –