所以我一直在利用注册表在Inno中创建ODBC连接。我遇到的问题是Inno没有创建我设置的所有键。我正在使用64位版本的Windows并使用32位Inno安装程序安装32位应用程序。我使用的路径是HKLM \ SOFTWARE \ WOW6432Node \ ODBC \ ODBC.INI
实施例: 我有一个连接TESTDBF1,它包含值: TESTDBF1
这将在32位ODBC管理器中创建连接,但我还需要指定显示的自定义dBase版本(IV)和目录(C:\ DIR)。为此,必须添加以下子项,或者ODBC管理器仅显示默认的dBase版本(V)和当前目录。
This Xbase directory is needed to hold the custom settings specified in the main TESTDBF1 section
The keys in the Xbase directory.
此外,我将名称:TESTDBF1作为字符串“Driver do Microsoft dBase(* .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! 没有。 我使用Inno Script Studio作为我的编译器。 我导入了我刚刚用于脚本的注册表文件TESTDBF1.reg,然后运行安装程序。没有这样的运气。 \ WOW6432Node \ ODBC \ ODBC.INI \ TESTDBF1中的所有键都已创建,但未创建以下子目录(\ Engines和\ Engines \ Xbase)提醒:Xbase包含确保ODBC.INI中的自定义信息的键打开ODBC管理器时,TESTDBF1保持不变。
所以在确认TESTDBF1.reg再次工作后,我会看看我在Inno写的代码:
; 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;
嗯。我找不到任何错误。我一次又一次地使用不同的名称,目录等运行安装脚本,无论我做什么,我都无法从安装脚本内部获取\ Engines \ Xbase键。
现在,为什么我不在安装结束时运行.reg文件?
因为我的部分脚本使用安装目录(更改)作为这些注册表项的一部分。注意ValueData。例如:
Root: HKLM; Subkey: SOFTWARE\WOW6432Node\ODBC\ODBC.INI\TESTDBF1; ValueType: string; ValueName: "DefaultDir"; ValueData: "{app}\IBS"; Flags: uninsdeletekey;
运行安装程序后,这是在HKLM \ Software \ WOW6432Node \ ODBC \ ODBC.INI \ TESTDBF1
中创建的密钥任何帮助都会非常感激 - 我现在很难过。
答案 0 :(得分:0)
我想我发现了 - 发布后几分钟。这篇文章可能有助于把事情弄清楚。
所以 - 当使用32位应用程序和32位安装程序编写32位密钥时,得到这个 - 你写入64位注册表目录。你不要写入WOW6432Node因为Inno的后端内容。它只是不写。
您必须写入64位目录,并且某处,Inno和Windows会以某种方式进行通信,并会自动获取您的32位信息并将其放入WOW6432Node中。你不能自己做。
所以我的实际修复是将我的所有reg条目更改为HKLM \ SOFTWARE \ ODBC \ ODBC.INI \ testdbf1etc,并且这样做,一切正常并正确写入HKLM \ SOFTWARE \ WOW6432Node \ ODBC \ ODBC.INI \ testdbf1etc。
我真的希望这部分在Inno中有更好的记录。如果你记得上面的话,我的.reg文件就可以了! Inno是那个不能正确编写密钥的人,但我想这是预期的,因为它是一个应用程序,而不是引用默认的Windows函数。
希望这有助于你们其他人!