GetPrivateProfileString:Strange Behavior,仅在文件被排除并再次包含在项目中时才有效

时间:2015-04-28 14:14:35

标签: vb.net winapi ini

我正在从VB6迁移到VB.NET 4.0(VS 2013 Professional),我应该使用INI文件来读取输入(客户端要求)。

要读取特定的文件路径,代码会调用该函数来读取INI文件。声明如下:

Dim i As Integer = IniFile.GetPrivateProfileString(Section, Key, "", temp, 1024, m_sIniFileName)


 <DllImport("kernel32")> _
Public Shared Function GetPrivateProfileString(ByVal section As String, ByVal key As String, ByVal def As String, ByVal retVal As System.Text.StringBuilder, ByVal size As Integer, ByVal filePath As String) As Integer
End Function

其中m_sIniFileName的类型为String。

奇怪的是,当我刚刚打开解决方案时,“GetPrivateProfileString”没有返回任何值,但是当我排除然后包含类文件(包含此代码)时,返回预期值并且它工作正常直到我关闭并再次打开解决方案。

知道这里发生了什么错误吗?

1 个答案:

答案 0 :(得分:0)

正如David Heffernan所建议的,我们同意停止使用GetPrivateProfileString,而是使用现在的XML来解决这个问题。

虽然这项技术非常原始,根本不推荐,但只是为了回答这个问题,我工作并找到了实际问题。

问题在于&#34; m_sIniFileName&#34;。 正在更改IniFiles的软件并没有实际修改C:\ WINDOWS \ Win.Ini(我们正在读取值的文件)的privelges,而是在Virtual Store中更新了值, C:\用户(用户)\应用程序数据\本地\ VirtualStore \的Windows \ WIN.INI

有关详细信息,请参阅link

因此,用户必须授予第三方软件的权限才能修改C:\ WINDOWS \ Win.Ini(不推荐)

一旦对软件授予完全访问权限,它就能正常运行。

强烈建议不要使用此解决方案,请使用其他方法来实现相同的功能