如何将VB6应用程序从XP更新到Vista?

时间:2009-02-18 17:54:42

标签: vb6 windows-vista uac windows-appcompat-platform

我在使用Vista的vb6应用程序上工作,原因很明显(写入程序文件,以及默认情况下不再允许的其他内容)。

  • 我应该在哪里存储应用程序数据或用户保存的文件?
  • 我是否还需要特权来创建文件夹和文件?
  • 还有哪些其他常见行为会导致问题?
  • 该程序有一个更新程序,必须下载和注册文件,如何在发生这种情况时提升权限?

其中一些问题有明显的答案,但我想明白这些问题。

4 个答案:

答案 0 :(得分:3)

根据你的所作所为,你可能会陷入痛苦的世界。这些问题都没有硬性和快速的答案,但是现在正在经历同样问题的人,这就是我所知道的。

1)我应该在哪里存储应用程序数据或用户保存的文件?

这取决于你想要做什么。如果您希望每个用户使用它们,请将它们存储在Users / AppData中,如果您希望它们适用于所有用户,请将它们存储在Common / AppData中

  If SHGetFolderPath(0, CSIDL_COMMON_APPDATA, -1, SHGFP_TYPE_CURRENT, sTempPath) = 0 Then
      sCommonAppdata = Left$(sTempPath, InStr(1, sTempPath, Chr(0)) - 1) &  "CompanyName\AppName"
  End If

将其更改为用户AppData目录的CSIDL_APPDATA。注意:这些映射到XP和Vista的文件系统上的完全不同的位置,因此当您正在调试时准备查看不同的位置。

2)我是否还需要特权来创建文件夹和文件?

如果可能的话,您需要Adminsitrator访问程序文件中的任何内容!我们目前running into issues,用于VB的API和标准API在程序文件中的文件表现不同。

3)其他哪些常见行为会导致问题?

有很多隐藏的陷阱。仅举几例,您无法通过IPC或命名管道与其他应用程序进行通信(我们通过托盘通知图标与我们交谈的服务必须完全重写)。你有什么事情看到UAC通知是非常困难的。此外,如果没有管理员,您无法在LOCAL_MACHINE中的注册表中写入任何内容,因此您必须坚持使用LOCAL_USER或提升凭据(见下文)。

4)程序有一个更新程序,必须下载和注册文件,如何在发生这种情况时提升特权(原文如此)?

祝你好运,我强烈建议你不要在VB6中编写它,就像我说的那样,VB6文件api似乎与标准API的访问文件不同。如果您需要提升权限,请参阅此人post,有人帮助我。

答案 1 :(得分:0)

在排序字词turning off UAC中安装ActiveX installer server会有所帮助。长期而言,您需要将数据和配置信息放在\ users或\ programdata下的users目录中。

答案 2 :(得分:0)

在短期内,可能根本不需要修改您的应用程序,因为 Vista附带了一组兼容性选项,可以运行旧版应用程序。这包括文件和注册表虚拟化,这一功能基本上将写操作重定向到受保护的文件夹(如C:\ Program Files)到仅对于以兼容模式运行的特定应用程序可见的虚拟位置。

本文提到了更多细节:Dobb博士的How To Manage Windows Vista Application Compatibility

答案 3 :(得分:0)

Karl Peterson写了nice article关于存储用户数据的位置&应用数据,带有VB6 class,可以为您检索特殊路径的位置。