2

我们有一个应用程序将其数据库文件存储在 Program Files 目录的子文件夹中。这些文件在 Vista 和 Windows 7 中被重定向到 VirtualStore。我们使用 Microsoft DataReports (VB6) 表示来自数据库的数据。到目前为止,一切都很好。

但是我们现在想使用 Crystal Reports XI 来表示来自数据库的数据。我们的想法是不要将这些数据从我们的程序传递给 CR,而是让 CR 通过 ODBC 使用系统 DSN 从数据库中检索它。通过这种方式,我们希望为我们的用户提供更多的灵活性来设计他们自己的报告。不过,我们想要确保的是,当用户安装我们的程序或程序调用 Crystal Report 时,这些系统 DSN 配置正确。

例如,是否有一种聪明的方法可以使用系统变量来执行此操作,而不必编写检查操作系统版本、是否在操作系统上启用 UAC、是否已解除对 Program Files 文件夹的写入限制等的例程然后调整他的系统 DSN 以指向 C:\Program Files\OurApp\Data 文件夹或 C:\Users\User\AppData\VirtualStore\Program Files\OurApp\Data 文件夹?

也欢迎提出完全不同的方法的建议!

4

4 回答 4

3

新应用程序应具有指定请求执行级别的应用程序清单。这声明您的程序“Vista 感知”并绕过虚拟化尝试。

在安装过程中,您应该创建一个类似 [CommonAppData]\Company\App\Full 的文件夹,并在此文件夹上设置安全性以允许所有人(或用户)进行完全访问。将您的数据库放入此文件夹。

对于 MDB,您可以在此处删除数据库。对于客户端/服务器数据库,在此处放置一个UDL 文件。另请参阅使用通用数据链接 (.udl) 文件

ODBC 和 DSN 是相当过时的技术。

除了最旧的 Win95 计算机之外,使用建议的方法应该适用于几乎任何东西。

于 2010-04-26T17:15:14.570 回答
1

这是一个Access数据库吗?你没有指定。

对于 Access 数据库,安装时无需将 DSN 指向特定数据库。您可以在运行时修改连接字符串以指向不同的数据库(详细信息)。例如

Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;

您是否可以在运行时简单地读取安装路径(在 VB6 中是App.Path),然后向 Crystal Reports 发送不同的连接字符串?

于 2010-04-26T11:26:18.640 回答
1

似乎 Virtual Store 可以处理所有事情,因此即使数据库已重新定位到 Virtual Store,您也可以将 DSN 公然指向 C:\Program Files\MyApp\Data\mydb.mdb。

于 2010-06-03T10:24:33.887 回答
0

当前版本


您可能想要检测系统正在运行的 Windows 的当前版本。

这反过来将帮助您确定正确的 PATH

如何查找 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 等的版本。EditionID 和 ProductId 可以知道 windows-edition 和 product-id。

键 BuildLabEx 包含内部版本号和修订号。

例如,在值中6001.17387.x86fre.vistasp1_gdr.070927-1921

  • 前四位数字代表内部版本号,即 6001 和

  • 接下来的五位数字代表 Windows 修订号,即 17387。

  • x86 告诉您正在运行 32 位操作系统。

您可能还对此感兴趣:
如何检测真正的 Windows 版本?

祝你好运!!

于 2010-04-25T09:40:25.140 回答