代码之家  ›  专栏  ›  技术社区  ›  Craig Gidney Mihai

如何将vb6应用程序从xp更新为vista?

  •  3
  • Craig Gidney Mihai  · 技术社区  · 16 年前

    我在一个vb6应用程序上工作,它与vista有问题,原因很明显(写入程序文件,以及其他默认情况下不再允许的东西)。

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

    其中一些问题的答案很明显,但我想把这些明显的问题弄清楚。

    4 回复  |  直到 16 年前
        1
  •  3
  •   Community CDub    8 年前

    取决于你在做什么,你可能会陷入痛苦的世界。对于这些问题,没有一个简单而快速的答案,但是对于正在经历同样问题的人来说,我知道的是。

    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)我是否也需要权限来创建文件夹和文件?

    你需要管理员权限来写程序文件中的任何东西,如果可能的话,不要这样做!我们现在 running into issues 在程序文件中的文件上,用于VB的API和标准API的行为不同。

    3)还有哪些常见的行为会引起问题?

    有很多隐藏的哥特人。仅举几个例子,您不能通过IPC或命名管道与其他应用程序通信(我们有一个服务,我们通过托盘通知图标与之通信,必须完全重新编写)。任何你看到的UAC通知都是非常困难的。另外,如果没有管理员,您也无法写入本地计算机注册表中的任何内容,因此您必须坚持使用本地用户或提高凭据(请参见下文)。

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

    祝你好运,我强烈建议你不要用vb6写它,就像我说的那样,vb6文件api看起来访问文件与标准api不同。如果你需要提升权限,请看这个 post 有人帮了我一把。

        2
  •  0
  •   Jim Blizard    16 年前

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

        3
  •  0
  •   Dirk Vollmar    16 年前

    从短期来看,可能根本不需要修改应用程序,因为 Vista提供了一组兼容性选项,允许运行遗留应用程序。这包括文件和注册表虚拟化,这是一个基本上将写操作重定向到受保护文件夹(如C:\Program Files)的功能,该功能只对以兼容模式运行的特定应用程序可见。

    本文还提到了更多的细节: How To Manage Windows Vista Application Compatibility 在Dobb博士的诊所里。

        4
  •  0
  •   MarkJ    16 年前

    卡尔·彼得森写了一封信 nice article 使用vb6存储用户数据和应用程序数据的位置 class 它为您检索特殊路径的位置。

    推荐文章