【发布时间】:2016-10-02 01:25:06
【问题描述】:
我正在尝试读取 INI 文件,然后将值转储到注册表中,以便设置应用程序运行。
INI 文件如下所示
[Setup Components]
Sybase Adaptive Server Anywhere Client=Yes
Borland Database Engine=Yes
BDERoot=c:\Program Files\Borland\BDE
Program Shortcuts=Yes
ODBC Data Service Name=Yes
Local Client = Yes
Sybase Admin = Yes
Sybase Directory= C:\Program Files\SQL Anywhere 16
DBRoot=c:\Database
Word Link=Yes
Installation Root Folder=c:\program
FireDAC=DB=asa16;eng=ENGINE;dbn=DBNAME;links=TCPIP{Host=127.0.0.1;Port=2638}
[Program Shortcuts]
Desktop=Yes
Start Menu=Yes
Program Title=PROGRAM
EXE Pathname=c:\program.exe
Parameters=DBNAME
Starting Directory=c:\
Icon=icon.ICO
[ODBC Data Service Name]
Data Service Name=DBNAME
Database File Name=c:\database\database.db
Database Name=DBNAME
Server Name=ENGINE
Comm Links=TCPIP{}
PrefetchBuffer=6000
PrefetchRows=50
CommBufferSize=1460
Compress=no
[Service]
Service Name=SQLANYs_DBNAME
Display Name=SQL Anywhere - DBNAME
Service Group=SQLANYServer
Params=-n DBNAME -x TCPIP{} "C:\database\database.db" -n DBNAME
所以我需要将所有这些项目轻松转储到注册表中。
我使用的是 Visual Studio 2015,我曾尝试使用 Ludvik Jerabek 的 INI 阅读器 (http://www.codeproject.com/Articles/21896/INI-Reader-Writer-Class-for-C-VB-NET-and-VBScript),但没有成功!
我在上面使用的代码如下:
Dim ini = New IniFile()
ini.Load("setup.ini")
Dim readValue = ini.Sections("Service").Keys("Service Name")
MessageBox.Show(readValue.ToString)
运行此代码时,我收到以下错误:“从字符串“服务”到类型“整数”的转换无效。-此外,此方法意味着命名 INI 文件中的每个键,这将是一项相当艰巨的任务!
在阅读了这里的一些帮助问题后,我采用了另一种方法,我使用了以下方法:
Private Declare Auto Function GetPrivateProfileString Lib "kernel32" (ByVal lpAppName As String,
ByVal lpKeyName As String,
ByVal lpDefault As String,
ByVal lpReturnedString As StringBuilder,
ByVal nSize As Integer,
ByVal lpFileName As String) As Integer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sb As StringBuilder
sb = New StringBuilder(500)
Dim readVal = GetPrivateProfileString("Service", "Service Name", "", sb, sb.Capacity, "setup.ini")
MessageBox.Show(readVal.ToString)
End Sub
然而这只是返回“0”
如果能找到一种方法从 INI 中获取此读数并将其转储到注册表,将不胜感激
【问题讨论】:
-
这条线是不是可能期望一个序数位置来代替字符串?
ini.Sections("Service").Keys("Service Name")例如ini.Sections(1)。等 -
Dim readValue As String = ini.Sections("Service").Keys("Service Name")和您的GetPrivateProfileString function作为字符串而不是整数。您可以稍后从字符串转换为整数。 -
将它们设置为字符串类型不起作用,仍然是同样的错误/问题