我维护一个VB6应用程序,将其数据(访问文件)存储在应用程序文件夹的子文件夹中。因此,当用户将应用程序安装到默认位置C:\Program Files\MyApp
时,数据最终会进入虚拟存储。我现在已经完成了将1000个左右的App.Path语句转换为不存在任何安全问题的Data文件夹的路径的甜蜜任务。有人可以通过指向一些资源来帮助我,这些资源会向我提供如何处理Users\< Username>\AppData\Local\
文件夹中的数据吗?
我应该使用本地AppData文件夹,还是让用户选择合适的位置?
答案 0 :(得分:2)
好吧,如果我们假设一些事情:
......我有一种可能会使用的解决方法。
请注意,当我有一堆旧的VB6程序被编写为使用App.Path下面的文件夹中的数据时,我只使用这个技巧,这是一种快速而肮脏的黑客攻击,可以让很多程序快速运行。我几乎总是添加或更新应用程序清单,主要是为了防止虚拟化。
我所做的更改是:
部署新程序时,在Vista或更高版本上,程序需要以管理员身份运行。在我的加载项代码的最新版本中,程序将提示用户在需要时重新运行它,并且当OK,它会这样做并自行终止。
第一次运行后,一切都应该是hunky-dory,运行方式与Win2K,XP等相同。
此需要提升的启动代码提供了PathLinks类所需的App.Path子文件夹列表。
Pathlinks在Public特殊文件夹下创建一个程序文件夹,然后为其下的数据创建匹配的子文件夹。接下来,它将这些App.Path子文件夹中的任何文件和子文件夹移动到新位置。最后,它会在App.Path下为新文件夹创建符号链接。
如果在Vista之前在Windows下运行,PathLinks只会创建任何尚未存在的App.Path子文件夹列表(在App.Path下)(即通过安装)。
从这里开始,程序将在新位置找到文件,而不需要对App.Path的使用进行任何更改。
两个加载项之一是化妆品,您可以将其删除。它只是让启动代码调用TaskDialog而不是使用MsgBox调用。
请务必向下滚动查看PathLinks - Tame App.Path Under Vista+
上发布的最新版本请注意,示例项目在执行“首次提升”操作时会跳过运行应用程序。在重新定位数据和符号链接后,它只在Sub Main中执行一个Exit Sub。
答案 1 :(得分:1)
我会使用本地AppData文件夹:
Dim sAppData As String
sAppData = Environ("USERPROFILE") & "\AppData"
答案 2 :(得分:0)
可以找到有用的讨论here
答案 3 :(得分:0)
我不知道是否有人(正在搜索它)搜索此文件。 但我在此页面上找到了一个很好的答案 http://www.vbforums.com/showthread.php?564256-Classic-VB-Where-should-I-store-the-files-that-my-program-uses-creates
我使用此代码获取正确的文件夹路径。
'this peace of code must be on the top of jour module in the declaration part.
Public Enum eSpecialFolders
SpecialFolder_Documents = &H5 'the Documents folder for the current Windows user
SpecialFolder_Favorites = &H6 'for the Favorites folder
SpecialFolder_Videos = &HD 'For the Video's folder
SpecialFolder_Desktop = &H10 'for the desktop folder
SpecialFolder_AppData = &H1A 'for the current Windows user, on any computer on the network [Windows 98 or later]
SpecialFolder_LocalAppData = &H1C 'for the current Windows user, on this computer only [Windows 2000 or later]
SpecialFolder_CommonAppData = &H23 'for all Windows users on this computer [Windows 2000 or later]
SpecialFolder_Windows = &H24 'for the windows folder
SpecialFolder_System32 = &H25 'For the windows system32 folder
SpecialFolder_Pictures = &H27 'for the picture folder
SpecialFolder_User = &H28 'for user folder C:\Users\sidxxxx
End Enum
'this can be placed before or after other functions
Public Function SpecialFolder(pFolder As eSpecialFolders) As String
'Returns the path to the specified special folder (AppData etc)
Dim objShell As Object
Dim objFolder As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.namespace(CLng(pFolder))
If (Not objFolder Is Nothing) Then SpecialFolder = objFolder.Self.Path
Set objFolder = Nothing
Set objShell = Nothing
If SpecialFolder = "" Then Err.Raise 513, "SpecialFolder", "The folder path could not be detected"
End Function
我在同一模块中使用了它 在其他功能中。
FileName = SpecialFolder(SpecialFolder_AppData)&“ \ Log \”&“ log.log”
这将设置FileName =“ C:\ Users \ username \ AppData \ Roaming \ Log \ log.log”
亲切问候