|
어느.. 특정한 프로그램이면.. 어느 경우을 말씀하시는 걸까요...? 아무튼.. 몇가지 경우를 적어보았습니다.
1. 찾고자 하는 프로그램이 단순한 카피 방식으로 이루어진 경우.
이 경우에는, 그 프로그램의 파일명등을 기억해 두었다가, 하드디스크를 전체 검색해 찾아내는 방법밖에 없을것 같습니다. 제일 시간이 오래 걸리고, 비 효율적인 방법입니다.
2. 찾고자 하는 프로그램이 특정한 레지스트리를 사용하는 경우
보통 프로그램이 사용하는 레지스트리 위치는 HKEY_LOCAL_MACHINE\SOFTWARE, HKEY_CURRENT_USER\SOFTWARE 둘 중 하나에 있습니다. (Windows 버젼에 따라 조금씩 틀립니다. 보통 전자가 많이 사용됩니다) 하지만, 특정한 프로그램이 자신의 저장 위치를 레지스트리에 저장을 시켜두었다는 전제 하에서만 레지스트리에서 읽어오는 것이 가능합니다. 그런데.. 프로그램이 굳이 자신의 위치를 레지스트리에 저장시켜 놓을 이유는 없겠지요... -_-a
3. 찾고자 하는 소프트웨어가 InstallShield 등과 같은 프로그램으로 설치된 경우
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
위 키에서는 UnInstall 을 할 수 있는 정보가 모두 담겨 있습니다. 대부분의 소프트웨어가 설치된 디렉토리 정보를 가지고 있습니다. (특별한 파싱이 필요한 경우도 있습니다) 이 경우가 가장 쉽게 찾을 수 있는 방법입니다.
아래 소스는 C++ Builder 가 설치된 디렉토리를 뽑아오는 예제입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#include <registry.hpp> // 레지스트리 사용시에는 이 헤더를 추가
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TRegistry *trRegistry = new TRegistry;
String stDirectory;
trRegistry->RootKey = HKEY_LOCAL_MACHINE;
trRegistry->OpenKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\CBuilder5", true);
stDirectory = trRegistry->ReadString("UninstallString");
trRegistry->CloseKey();
delete trRegistry;
// C++ Builder 디렉토리를 뽑아오는데 필요한 파싱
stDirectory = stDirectory.SubString(stDirectory.Pos("\"") + 1, 255);
stDirectory = stDirectory.SubString(1, stDirectory.Pos("\"") - 1);
stDirectory = ExtractFilePath(stDirectory);
ShowMessage(stDirectory);
}
//---------------------------------------------------------------------------
김성호 님이 쓰신 글 :
: 특정 프로그램이 설치된 폴더를 레지스트리에서 찾고 싶습니다.
:
: 어떻게 해야 하나요?
|