2013-06-21 25 views
0

我为报表运行VB 6应用程序。系统DSN在本地打印效果良好。但是,当我将该应用程序的.exe文件放在RDS中时,报告不是为系统DSN打印,而是为用户DSN打印。系统DSN显示 - “无法打开SQL服务器”。系统DSN不适用于所有用户的远程桌面服务器(RDS)

我Efforts- 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 Server”的错误。 但是,尽快我创建用户DSN,它工作正常。请帮忙。

+0

此VB6应用程序是否以传统模式运行(没有带有节点的清单)?如果是这样,那么到目前为止,您可能已经为一个或多个用户虚拟化了旧的不正确系统DSN的副本。你做的任何事情都不会让程序看到真正的程序,直到你清除掉或停止以传统模式运行。 – Bob77

+0

感谢Bob77的回应,同时如何清理那些?我已经删除了那些试图再次创建的DSN,但它对我有用。 –

回答

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可能会成为很多注册表的烦恼。您可以通过创建一个在每个损坏的用户标识下运行一次的脚本或小程序来轻松完成此操作。

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

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

最终修复(清理机后)可能是:使用的DSN在所有

  • 停止。它们已被弃用了很长时间,这就是为什么我们有无DSN连接字符串。当硬编码连接不实际时,这些文件很容易和安全地存储在INI文件等地方。我们现在也有UDL files多年。
  • 处理程序中的appcompat问题,然后向它们添加清单,以便它们以“UAC aware”模式运行,而不是传统模式。这可以防止这种混乱并且很难解决事故。
+0

+1让我知道系统注册表。 –

+0

是的,我改变了连接字符串和它的工作正常,说再见DSN的。感谢Bob77 :-) –

相关问题