Delphi/C++Builder 2010 혹은 2009의 루트 폴더 설치 프로그램을 실행하면, 설치 프로그램의 초기 화면도 뜨기 전에 위의 첫번째 이미지와 같이 “” is not a valid integer value”” 라는 에러가 나는 경우가 간혹 있습니다. 그런 후 ‘확인’을 누르면 위의 두번째 이미지처럼 Access Violation 에러가 다시 발생합니다.
이런 경우가 자주 발생하는 것도 아니고, 아주아주 드물게 한건씩 발생하는데요. 최근에 다시 이런 경우가 있어서 추적하다가 원인과 해결책을 알아냈습니다.
이것은, 설치하려는 PC에 이전에 설치했던 프로그램들 중 하나에서, CD의 AutoRun 기능을 동작하지 않도록 하기 위해 해당 프로그램의 개발자가 레지스트리의 AutoRun 항목을 아예 막아버리는 편법을 사용했기 때문입니다. (이런 어이없는 편법을 사용하는 개발자들이 꽤 되는 모양이더군요) 따라서 이런 문제가 발생할 때는, 레지스트리에서 해당 AutoRun을 막은 곳을 찾아 지워버리면 됩니다.
먼저, 레지스트리 에디터(regedit.exe)를 실행시키고, 아래의 키를 찾아갑니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \IniFileMapping\Autorun.inf
위의 키가 존재하고, 그리고 그 (기본값)이 @SYS:DoesNotExist 이런 식으로 지정되어 있다면 이 케이스에 해당합니다.
이 Autorun.inf 키 자체를 삭제해버리시고, 윈도우를 재부팅하신 후, 다시 설치를 시도해보시면 잘 되실 겁니다. (원래 이 Autorun.inf 키가 존재하지 않는 것이 디폴트입니다)
2010. 4. 30 추가 ———————————————–
간혹 이 레지스트리 키를 지웠는데도 계속 다시 이 키가 생기는 분이 있을 수 있습니다. 어떤 프로그램이 CD 자동실행 방지를 막기 위해 계속 이 레지스트리 키를 감시하다가 써넣고 있는 것으로 보이는데요. 아마도 그 범인은 안티바이러스 등의 보안 프로그램일 가능성이 높습니다. 이 레지스트리를 이용하는 방법을 공개한 사람의 목적이, USB 메모리를 감염시키는 바이러스를 막기 위한 간단한 방법으로서 소개했었기 때문입니다. 하지만 자동실행을 막는 표준적인 방법이 따로 있으며, 이 레지스트리 방법은 편법입니다.
이 레지스트리 키는 원래 없는 것이 디폴트인데도 다른 프로그램의 오동작까지 불러일으키면서도 계속 레지스트리 키를 만드는 것이므로 그 프로그램의 문제에 해당합니다. 게다가 이 레지스트리 키 방법이 자동실행을 막는 원칙적인 방법이 아닌 꽁수이기 때문에, 이 문제는 다른 CD/DVD 미디어의 루트 런처 프로그램들에서도 동일하게 발생할 수 있습니다.
하지만 어쨌든 결과적으로 Delphi나 C++Builder를 설치하려는 분에게는 문제가 되므로, 다른 해결책도 알려드리겠습니다.
위의 ” is not a valid integer value 에러 메시지는, 오직 DVD 미디어의 루트에 있는 설치 프로그램에서만 발생합니다. (2010 버전의 경우 install_RADStudio.exe, 2009 버전의 경우 install.exe) 이 설치 프로그램은 실제 Delphi/C++Builder를 설치하는 프로그램이 아니라 실제 설치 프로그램들을 실행해주는 런처 프로그램이구요.
하지만, 루트 폴더의 런처 프로그램이 아닌, 실제 설치 프로그램을 실행하시면 당연히 이런 문제가 발생하지 않습니다. Delphi/C++Builder 2010 및 2009 버전의 DVD 미디어에서 실제 설치 프로그램은 (드라이브):\Install\Setup.exe 입니다. 이것을 직접 실행시키면 위와 같은 에러 메시지가 발생하지 않고 정상적으로 설치가 됩니다.
ㅠㅠ
저도 당연히 이 오류가 뜨는데요, 국가 정보원에서 공급하는 CD 자동 실행 방지 유틸리티인 usbguard를 실행시켜 자동 실행을 차단 시켜놓으면 이렇게 됩니다. 말씀 하신 것처럼 “편법”은 아닌것 같습니다.
위 본문에 덧붙인 글에 썼다시피, 시디 자동실행 방지를 위한 표준 방법이 따로 있는데 비표준 방법을 썼으니까 편법이라고 할 수 있는 거죠.
국정원 프로그램을 개발한 개발자가 어떤 분인지 몰라도 표준 방법보다 일부에서 알려진 편법을 계속 사용하고 있는 것일 뿐입니다.