안녕하세요...
델파이 7, Win 2000pro, 로컬 DB로 interbase6.0오픈 소스 버전을 사용중인 초보 프로그래머입니다.
C/S프로그램을 개발중인데요...문제점이 나타나서 질문드립니다.
로컬에 미리 interbase가 설치되어있는지 검사하고 설치되어있으면 프로그램만 설치하고 ,
그렇지 않으면 interbase를 설치하고, 프로그램을 설치하게 만들었습니다.
그래서 레지스트리에 interbase폴더가 존재하는지 유무를 검사하는 로직을 만들었습니다...
그런데 문제는 interbase만 설치된 컴퓨터에서 interbase를 제거를 했는데, 프로그램은 제거되었는데 레지스트리에는 interbase폴더가 존재하는 것입니다.
그러니 프로그램을 설치하니 interbase가 설치된 줄 알고, 프로그램만 설치하는 것입니다.
당연히 interbase는 없으니 실행될리가 없겠죠...^^;
레지스트리에서 interbase폴더를 검사하는게 아니고 키값이 존재하는지로 바꾸어야 될것같은데 어떻게 해야하는지 잘 몰라 질문드립니다...
여러분들의 많은 도움 부탁드립니다.
모두 즐코하시고 행복하세요...
*******************************************************************************************
여기에 제가 했던 소스를 올립니다....
procedure TfmSetUp.btnStartClick(Sender: TObject);
var
ret: integer;
regLocalMachine: TRegistry; //레지스트리 클래스
regCurrentUser: TRegistry;
begin
regLocalMachine := TRegistry.Create;
regLocalMachine.RootKey := HKEY_LOCAL_MACHINE;
regLocalMachine.OpenKey('SOFTWAREBorland', true);
regCurrentUser := Tregistry.Create;
regCurrentUser.RootKey := HKEY_CURRENT_USER;
regCurrentUser.OpenKey('SOFTWAREBorland', true);
//미리 InterBase가 설치되어있다면
if (regLocalMachine.KeyExists('InterBase') = True or regCurrentUser.KeyExists('InterBase') = True) then //==>이부분이 인터베이스 존재 유무를 검사하는 부분입니다................................
begin
// testsetup만 실행한다.
while WinExecAndWait32(PChar(testsetup.exe'), PChar(''), 1) <> 0 do
Application.ProcessMessages;
ShowMessage('모든 프로그램의 설치가 완료 되었습니다');
end
else
begin
ShowMessage('InterBase 설치를 시작합니다. OK를 눌러 설치를 시작하십시오.');
while WinExecAndWait32(PChar('InterBasesetup.exe'), PChar(''), 1) <> 0 do
Application.ProcessMessages;
ShowMessage('다음 단계로 진행하시려면 OK를 눌러 test프로그램을 설치하십시오');
while WinExecAndWait32(PChar('testsetup.exe'), PChar(''), 1) <> 0 do
Application.ProcessMessages;
ShowMessage('모든 프로그램의 설치가 완료 되었습니다');
end;
Close;
Free;
end;