2012-01-11 67 views
8

我有一个VB6应用程序链接到Windows 7 32位机器的几个POS终端。 POS终端映射到Windows 7机器,我可以从资源管理器或通过cmdline/shell从Windows 7机器访问POS终端。在Windows 7上的VB6应用程序无法访问映射的驱动器

该应用程序已更新为ADO 2.8,并且所有其他控件和组件都不再有源代码,因此已被重新编写。经过一些烦人的打嗝后,我得到了应用程序在Windows 7计算机上重新编译没有错误。

现在问题来了。 VB6应用程序无法看到或导航到任何映射的驱动器!我已经尝试过UAC设置;我已将应用程序设置为在Windows XP SP3模式下运行;我曾尝试以管理员身份运行。这些东西(以及这些东西的许多排列)都不起作用。

关于如何使这项工作的任何建议?

+0

如何设定要在Windows XP SP3模式下运行?当*不在该模式下运行时会发生什么? – Gabe 2012-01-11 01:26:30

+0

您将其设置为以兼容模式运行,并将其设置为使用Windows XP SP3作为兼容模式。这是通过右键单击链接并使用属性完成的。实际上,当我使用这种兼容模式运行它时没有区别。 – 2012-01-11 01:45:10

+1

当您尝试导航到映射的驱动器时会发生什么? UNC路径怎么样? – Gabe 2012-01-11 01:58:37

回答

4

我相信你有麻烦,因为随便驱动器映射是每个用户,并在UAC系统上管理员组用户有两个单独的上下文(每个令牌一个:SU &提升)。

有一种系统级驱动映射,这是在系统用户(NT Authority \ System)下完成的。当您在该帐户下映射驱动器并持续映射驱动器时,所有用户都可以看到并使用该映射(受限于那里文件的常见访问权限)。

您这样做的正常方式是通过域级GPO(组策略对象),这意味着如果在公司管理的LAN环境中贿赂您的本地Box控制器。工作组中的机器执行此

的一种方式是经由AT命令来映射函作为系统,从一个升高命令提示:

at 8:53 am "net use m: \\MediaShare\MyLibrary 
    ThePW /user:MediaShare\TheUser /persistent:yes > nul" 

有远程服务器是MediaShare,用户TheUser,密码ThePW,以及上午8点53分是在未来一两分钟,以避免意外调度明天。

但是由于会话0隔离,Vista和更高版本会失败!

因此...使用第三种替代方法Run CMD.exe as Local System Account这与ForcePush对How to map a network drive to be used by a service的回复中提到的内容相同。

我相信这就是你在这之后。

+0

感谢您的意见。在这种情况下,驱动器映射最初是作为登录用户的本地映射而建立的。我认为这可能是导致问题的原因,然后让网络支持人员设置用户,以便根据您的建议或通过登录脚本配置由GPO设置的映射。无论哪种情况,结果都是一样的。登录的用户可以查看并导航到映射的驱动器,并可以使用资源管理器或通过命令行访问所有文件。但是,VB6应用程序无法在运行时“查看”或访问共享。 – 2012-01-11 16:34:14

+0

通常,登录脚本仅为非登录用户登录设置映射。 VB6程序运行的凭据究竟是什么?同一个用户?一名高级用户?其他用户? – Bob77 2012-01-11 18:16:22

+0

该应用程序使用登录用户的凭据运行。从应用程序的角度来看,这是所有需要的。 – 2012-01-12 14:25:43

8

添加此注册表设置为我解决了问题:http://technet.microsoft.com/en-us/library/ee844140%28v=ws.10%29.aspx

要解决此问题,请配置EnableLinkedConnections 注册表值。此值可使Windows Vista和Windows 7至 共享已过滤的访问令牌和管理员组成员 完整管理员访问令牌之间的网络连接。配置此注册表值后,如果网络资源映射到访问令牌,LSA会检查是否存在与当前用户会话关联的另一个访问令牌 。如果LSA 确定存在链接的访问令牌,则会将网络 共享添加到链接的位置。要配置EnableLinkedConnections 注册表值

  1. 单击开始,键入regedit在开始的程序和文件框, 然后按ENTER键。

  2. 找到并右键单击注册表子项HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System。

  3. 指向新建,然后单击DWORD值。

  4. 键入EnableLinkedConnections,然后按Enter。

  5. 用鼠标右键单击EnableLinkedConnections,然后单击修改。

  6. 在数值数据框中,键入1,然后单击确定。

  7. 退出注册表编辑器,然后重新启动计算机。

+0

这为我工作,专门为通用USB安装程序http://www.pendrivelinux.com/universal-usb-installer-easy-as-1-2-3。 – 2015-08-02 23:56:05

0

不知道如果你想通了这一个了,但对我来说这是CHDIR命令(即使使用注册表修复以上)。

我在我的代码

ChDir "P:\Temp\VidCap\Cam1\" 'I almost never use ChDir Open "list.txt" For Output As #1

和所有的VB6内置的文件中的命令直直的看着虽然任何操作,没有错误,什么都没有。我通过明确的路径解决了这个问题(在我的代码中它是一个字符串,但你可以明确指出):

dd = "P:\Temp\VidCap\Cam1\" Open dd & "list.txt" For Output As #1 按预期工作。

希望这有助于

^h

相关问题