我正在将VB6应用程序转换为VB.NET。在我转换的代码中,开发人员似乎发现应用程序路径有两种不同的方式。但是,他似乎希望这两种方法产生不同的结果。
简单问题:
调用这两行代码有什么区别:
strAppDataPath = CreateObject("Shell.Application").
NameSpace(ssfLOCALAPPDATA).Self.Path
和
strAppDataPath = App.Path
解释
这是有问题的代码:
strAppDataPath = CreateObject("Shell.Application").
NameSpace(ssfLOCALAPPDATA).Self.Path
strAppDataPath = strAppDataPath & "\DataFolder\"
If (Not objFileSystem.FileExists(strAppDataPath & strAppDataFile)) Then
If (objFileSystem.FileExists(App.Path & strAppDataFile)) Then
...
End If
End If
应用程序的路径附加\DataFolder\
,并存储在字符串strAppDatapath
中。
我们检查strAppDataFile
中是否存在strAppDatapath
文件。然后检查App.Path
中是否存在 文件。
正在发生的事情背后的概念对我有意义:如果子文件夹中不存在该文件,并且该文件存在于App.Path
中,则执行...
。我不明白的是为什么他们没有使用其中一种方法专门找到应用程序的路径。
答案 0 :(得分:2)
他们没有指向同一条道路。
自Windows XP以来,漫游&本地应用程序数据路径是存储用户设置和文件的首选位置(而不是可能受权限限制的应用程序文件夹)。
代码的作用是:
请注意,应用程序应优先在本地/漫游应用程序数据中创建特定于应用程序的子目录,例如:使用类似的东西:
strAppDataPath = strAppDataPath & "\" & App.ProductName & "\DataFolder\"
' NOTE: Make sure to set the "Product Name" entry in the version information
' of the project settings
可以解决类似
的问题"C:\Users\UserName\AppData\Local\My Application\DataFolder\"
答案 1 :(得分:1)
我的猜测是,当每台机器安装程序时,会使用LocalAppData下的每用户位置。但是,在开发期间或按用户安装或作为便携式应用程序时,将使用应用程序文件夹。
一些程序员使用类似代码的东西,而其他程序员则通过将App.Path与ssfPROGRAMFILES路径进行比较来确定环境。后者可能有多种原因,但在退化的情况下,只有一个程序实例存在于一台机器上,它们是等价的。