系统DSN不适用于所有用户的远程桌面服务器(RDS)

时间:2013-06-21 02:45:07

标签: vb6 windows-server-2008 dsn rds

我正在为报告运行VB 6应用程序。它使用System DSN在本地打印得很好。但是当我将应用程序的.exe放在RDS中时,报告不是打印系统DSN而是打印用户DSN。对于系统DSN,它显示“无法打开SQL服务器”。

我的努力 - 1。 http://social.technet.microsoft.com/Forums/windowsserver/en-US/bb2ced17-9dd3-40e4-b5b6-dd773ee7001c/system-dsn-on-rds-server  我尝试使用[WindowsDir] \ SysWOW64 \ odbcad32.exe创建一个32位DSN,但不适合我。

2. http://www.tek-tips.com/viewthread.cfm?qid=341776我尝试更改以管理员身份登录的系统DSN的权限,并使用regedt32为用户授予完全权限。但仍然与“无法打开SQL服务器”相同的错误。 但是,一旦我创建用户DSN,它就可以正常工作。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果此问题是由于为一个或多个用户创建的“陈旧”不正确的虚拟化系统DSN引起的,则更改真实的系统DSN无关紧要。以传统模式为这些用户运行的程序将继续查看其虚拟副本。

系统DSN存储在:

HKEY_LOCAL_MACHINE\Software\Odbc\Odbc.ini\Odbc Data sources

...但虚拟化条目最终在:

HKEY_USERS\<User SID>_Classes\VirtualStore\Machine\Software\Odbc\Odbc.ini\Odbc Data sources

......根据Registry Virtualization

因此,要清除虚拟化的注册表项(删除它们)以取消屏蔽真正的DSN可能是很多注册表摆弄。您可以通过创建在每个损坏的用户ID下运行一次的脚本或小程序来最轻松地完成此任务。

或者只是重新格式化启动驱动器并重新安装Windows!

这甚至没有涉及WOW64注册表重定向的可能问题,这是一个不同但类似的问题。为什么不停止使用蹩脚的旧笨拙的ODBC?你真的是故意使用它吗?

最终修复(清理机器后)可能是:

  • 完全停止使用DSN。它们已被弃用了很长时间,这就是我们拥有无DSN连接字符串的原因。当硬编码连接不可行时,这些存储在诸如INI文件之类的地方是容易和安全的。我们现在已经有UDL files年了。
  • 处理程序中的appcompat问题,然后向其中添加清单,以便它们以“UAC感知”模式而不是传统模式运行。这可以防止这种混乱,并且难以修复意外。