在设计Windows的应用时,会间接地或者直接地需要访问本地网络资源,本地网络资闫龇疮傣源当然通过IP和端口来配合服务来访问,或者简单地使用UNC路径来访问。为了保证应吹涡皋陕用程序能够毫无障碍地访问本地网络资源,就要在代码中完善对上述两种方式的支持,假如应用选择第二种,在WindowsVista之后的版本(Win7和Win8以及最新的Win10)有可能就会遇见自己应用不能访问UNC路径,或者尝试访问就会报错的问题。即便选择点击鼠标右键然后选择"以管理员权限运行"运行应用也不行。该问题的症结在于UAC。UAC就是用户账户控制。该问题之所以会发生是因为开启UAC之后,用户账户控制组件会将管理员组的用户视为普通用户进行处理。当一个管理员成员登陆到WindowsVista或者更新Windows版本时,并且UAC处于开启状态,该成员将被视为一个普通用户,普通用户,在Windows中属于Users组而非Administrators组。这时候如果你该成员如果执行一个任务,该任务又需要管理员的访问令牌Token的时候。用户账户管理组件就会准备一个对话窗口(UserAccountControldialog如下)来询问你,提示你请求批准该任务的执行。例如在你执行一些安装程序时,在程序启动时就会遇见一个对话用于寻求使用管理员令牌来执行该安装。当一个管理员登陆到WindowsVista或者更新Windows版本时。当本地安全机制意识到该用户是管理员组的成员时,本地安全机制(LocalSecurityAuthority)会同时创建两个访问令牌。首先会创建一个具有完全管理员权限的令牌,和一个删除了部分管理员的权限的访问令牌,其中第二个被用于启动用户桌面。所以在运行一个应用程序时,在出现对话框时点击YES。应用程序就可以完全使用管理员的访问令牌(第一个)。当一个用户登陆到WindowsVista或者更新Windows版本时,而且安全机制已开启。一个应用可以使用一个限制过的访问令牌(即第一个)而且允许同时使用一个带有管理员权限的访问令牌(即第二个)。因为本地访问机制创建令牌是使用了单独的会话,而且每个访问令牌有自己单独的ID。而映射网络共享内容时,网络共享内容只被映射到那个被限制过的访问令牌(即第二个)上,而没有映射到那个具有管理员权限的(即第一个)访问令牌,所以就会出现问题。
对于应用的使用者
1、应用的使用者,非开发人员,可以自己或者请求管理员(如果没有权限),可以在注册表中添加一个名为"EnableLinkedConnections"的键值来一劳永逸地解决这个问题(添加后需要重新启动)。需要注意的是修改注册还是具有风险的,操作时候要谨慎,步骤如下。
2、然后定位到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System的位置。
3、然后单击右键,选择添加(New),进而选择DWORDValue。
4、然后键入EnableLinkedConnections,如图。
5、右键单击新添加的键,选择修改(Modify),如图将值修改为1。
6、保存并重新启动。
对于安装程序的设计者
1、在设计一般的安装程序时,需要在设置[Setup]添加配置参数:"Allo嘛术铹砾wNetworkDrive=yes"。而在运行安散艉九慊装程序是,如果单击Browse按钮,在文件路径对话框中还是没有映射的网络资源。所以,不能单击Browse按钮,要在文本框中手动输入UNC路径,然后单击下一步(Next)按钮,安装程序就获得了UNC路径,并能够访问该路径。
2、对于一些特殊的安装程序设计,例如安装程序文件的安装路悄钸碌灵径大部分用到UNC路径,并且没有对C盘程序Program文件的读写需要,就可以在is霜杼厮贿s文件中将配置参数设置为"Privilegesrequired=lowest",就可以在安装过程中,单击Browse按钮然后选择UNC路径。
对于需要在CMD命令行中使用UNC路径的用户
1、如果是要在CMD命令行中使用UNC路径,就可以以管理员的身份启动CMD之后键入:netuse\\<computername>\<sharename><passowrd>/user:<username>
2、用于创建一个空链接或者将UNC路径映射到本地I盘,命令如下:netusei:\\<computername>\<sharename><passowrd>/user:<username>然后就可以使用该网络资源了。