2017-11-09 2 views
0

그래서 레지스트리를 사용하여 Inno에서 ODBC 연결을 생성하는 중입니다. 내가 겪었던 문제는 Inno가 내가 설정 한 모든 키를 생성하지 않는다는 것입니다. 64 비트 버전의 Windows를 사용하고 32 비트 Inno 설치 프로그램을 사용하여 32 비트 응용 프로그램을 설치합니다. 내가 사용하고 경로는 HKLM \ 소프트웨어입니다 \ WOW6432Node \ ODBC \ ODBC.INIInno 설정으로 모든 ODBC REG 키가 생성되지 않음

예 :이 32 비트 ODBC 관리자에서 연결을 생성 TESTDBF1

: 나는 값을 유지하는 연결 TESTDBF1이 하지만 또한 사용자 지정 dBase 버전 (IV)과 디렉터리 (C ​​: \ DIR)를 지정해야합니다. 이를 수행하려면 아래의 하위 키를 추가해야합니다. 그렇지 않으면 ODBC 관리자는 기본 dBase 버전 (V) 및 현재 디렉터리 만 표시합니다.

또한 The keys in the Xbase directory.

This Xbase directory is needed to hold the custom settings specified in the main TESTDBF1 section

, 내가 이름을 추가 TESTDBF1를 문자열로 "드라이버는 어떻게 마이크로 소프트 디베이스 (* .DBF)"WOW6432Node \ ODBC \ ODBC.INI \ ODBC 데이터 소스로.

이러한 명령을 모두 실행하려면 TESTDBF1.reg를 작성하여 기능을 확인하십시오. 이 파일을/병합 실행시

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1] 
"Driver"="C:\\WINDOWS\\system32\\odbcjt32.dll" 
"DefaultDir"="C:\\IBS" 
"DriverId"=dword:00000115 
"FIL"="dBase IV;" 
"SafeTransactions"=dword:00000000 
"UID"="" 

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines] 

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase] 
"CollatingSequence"="ASCII" 
"Deleted"=hex:00 
"ImplicitCommitSync"="" 
"PageTimeout"=dword:00000005 
"Statistics"=hex:00 
"Threads"=dword:00000003 
"UserCommitSync"="Yes" 

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\ODBC\ODBC.INI\ODBC Data Sources] 
"TESTDBF1"="Driver do Microsoft dBase (*.dbf)" 


는, 모든 키가 성공적으로 만들어지고 나는 값이 ODBC 관리자에 표시되는 사용자 정의를 확인할 수 있습니다.

그래서 저는 생각합니다 - 안녕하세요! 이제 Inno에 추가 할 수 있습니다! No. Inno Script Studio를 제 컴파일러로 사용하고 있습니다. 레지스트리 파일 TESTDBF1.reg를 가져 왔습니다. 방금 스크립트에 사용한 다음 설치 프로그램을 실행합니다. 그런 행운은 없습니다. \ WOW6432Node \ ODBC \ ODBC.INI \ TESTDBF1에있는 모든 키가 생성되지만 다음 하위 디렉토리는 생성되지 않습니다 (\ Engines 및 \ Engines \ Xbase).주의 : Xbase는 ODBC.INI \ TESTDBF1은 ODBC 관리자를 열 때 보류됩니다.

; Imported Registry File: "C:\Users\Support\Documents\test\TESTDBF1.reg" 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "Driver"; ValueData: "C:\WINDOWS\system32\odbcjt32.dll"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "DefaultDir"; ValueData: "C:\DIR"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: dword; ValueName: "DriverId"; ValueData: "$00000115"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "FIL"; ValueData: "dBase IV;"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: dword; ValueName: "SafeTransactions"; ValueData: "$00000000"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "UID"; ValueData: ""; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: string; ValueName: "CollatingSequence"; ValueData: "ASCII"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: binary; ValueName: "Deleted"; ValueData: "00"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: string; ValueName: "ImplicitCommitSync"; ValueData: ""; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: dword; ValueName: "PageTimeout"; ValueData: "$00000005"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: binary; ValueName: "Statistics"; ValueData: "00"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: dword; ValueName: "Threads"; ValueData: "$00000003"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1\Engines\Xbase; ValueType: string; ValueName: "UserCommitSync"; ValueData: "Yes"; Flags: uninsdeletekey; 
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\ODBC Data Sources; ValueType: string; ValueName: "TESTDBF1"; ValueData: "Driver do Microsoft dBase (*.dbf)"; Flags: uninsdeletekey; 

흠 다음 TESTDBF1.reg를 확인하는 것은 다시 작동 후

그래서, 나는 이노에 쓰고 있어요 코드를 살펴. 나는 그것으로 잘못된 것을 발견 할 수 없다. 나는 설치 스크립트를 다른 이름, 디렉토리 등으로 반복해서 실행했고, 무엇을하든 관계없이 \ Engines \ Xbase 키를 설치 스크립트 내부에서 쓸 수는 없다.

이제 설치가 끝나면 .reg 파일을 실행하지 않으시겠습니까?

내 스크립트의 일부가이 등록 키의 일부로 설치 디렉토리 (변경 사항)를 사용하기 때문에. ValueData를 참고하십시오. 예 :

Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "DefaultDir"; ValueData: "{app}\IBS"; Flags: uninsdeletekey; 

설치 프로그램을 실행 한 후,이 어떤 도움이 많이 주시면 감사하겠습니다

Post Install Key

HKLM \ SOFTWARE \ WOW6432Node \ ODBC \ ODBC.INI \ TESTDBF1에서 생성되는 키입니다 - 나는이 시점에서 꽤 난처한 상황이다.

답변

0

게시 후 몇 분 안에 알아 냈다고 생각합니다. 이 게시물은 아마 물건을 똑바로 얻을 수있었습니다.

그래서 32 비트 응용 프로그램과 32 비트 설치 프로그램을 사용하여 32 비트 키를 쓸 때 64 비트 레지스트리 디렉토리에 씁니다. 당신은 Inno의 백엔드 물건 때문에 WOW6432Node에 쓰지 않습니다. 그것은 단지 쓰지 않습니다.

Inno와 Windows가 64 비트 디렉토리에 쓴다면 어쨌든 Inno와 Windows가 자동으로 32 비트 정보를 가져 와서 WOW6432Node에 저장합니다. 너 스스로 할 수는 없어.

내 실제 수정 사항은 내 reg 항목을 모두 HKLM \ SOFTWARE \ ODBC \ ODBC.INI \ testdbf1etc로 변경 한 것이므로 모든 것이 올바르게 작동하고 HKLM \ SOFTWARE \ WOW6432Node \ ODBC \ ODBC.INI로 올바르게 작성되었습니다. \ testdbf1etc.

나는이 부분이 Inno에서 더 잘 문서화 되었으면 좋겠다. 위의 내용을 기억하면 내 .reg 파일이 작동했습니다! Inno는 키를 제대로 쓰지 않는 사람 이었지만, 기본 Windows 기능을 참조하는 대신 응용 프로그램이므로 기대할 것입니다.

희망은 나머지 사용자에게 도움이되기를 바랍니다.

관련 문제