我们有一个应用程序将其数据库文件存储在Program Files目录的子文件夹中。这些文件被重定向到Vista和Windows 7中的VirtualStore。我们使用Microsoft DataReports(VB6)表示来自数据库的数据。到目前为止一直很好。
但我们现在希望使用Crystal Reports XI来表示数据库中的数据。我们的想法是不将这些数据从我们的程序传递给CR,而是让CR使用系统DSN通过ODBC从数据库中检索它。通过这种方式,我们希望为用户提供更灵活的设计自己的报告。我们确实希望确保在用户安装程序或程序调用Crystal Report时正确配置这些系统DSN。
有没有一种聪明的方法可以使用系统变量来执行此操作,而不必编写检查操作系统版本的例程,是否在操作系统上启用了UAC,是否已取消对Program Files文件夹的写入限制等然后调整他的系统DSN指向C:\ Program Files \ OurApp \ Data文件夹,或C:\ Users \ User \ AppData \ VirtualStore \ Program Files \ OurApp \ Data文件夹?
建议采用完全不同的方法!
答案 0 :(得分:3)
新应用程序应该有一个指定requestedExecutionLevel的应用程序清单。这声明您的程序“Vista aware”并绕过了虚拟化的尝试。
在安装过程中,您应该创建一个像[CommonAppData] \ Company \ App \ Full这样的文件夹,并在此文件夹上设置安全性,以允许Everyone(或用户)进行完全访问。将您的数据库放入此文件夹。
对于MDB,您可以在此处删除数据库。对于客户端/服务器数据库,在此处放置UDL file。另请参阅Use Universal Data Link (.udl) Files。
ODBC和DSN是非常过时的技术。
使用建议的方法几乎可以用于除最旧的Win95计算机以外的任何其他方法。
答案 1 :(得分:1)
这是Access数据库吗?您尚未指定。
对于Access数据库,安装DSN时无需将DSN指向特定数据库。您可以在运行时修改连接字符串以指向不同的数据库(details)。例如
Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;
您是否可以在运行时(在VB6中为App.Path
)简单地读取安装路径,然后向Crystal Reports发送不同的连接字符串?
答案 2 :(得分:1)
虚拟存储似乎可以处理所有事情,因此即使数据库已重新定位到虚拟存储,您也可以将DSN公然指向C:\ Program Files \ MyApp \ Data \ mydb.mdb。
答案 3 :(得分:0)
您可能想要检测系统正在运行的当前版本的Windows 。
这将帮助您确定正确的路径。
如何查找Windows版本,构建版本和修订版号?
阅读注册表项 -
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentBuildNumber
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentVersion
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ EditionID
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ ProductId HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ BuildLabEx
CurrentBuildNumber是您的Windows内部版本号。那么CurrentVersion值就是你的windows版本,即你的windows 7,windows vista,windows xp等版本的版本ID和ProductId,以了解windows-edition和product-id。
密钥BuildLabEx包含内部版本号和修订号。
例如,在值6001.17387.x86fre.vistasp1_gdr.070927-1921中,
前四位数表示内部编号,即6001和
接下来的五位数代表windows修订号,即17387
x86告诉您正在运行32位操作系统。
您可能也对此感兴趣:
How to detect true Windows version?
古德纳克!!