Web应用程序访问网络驱动器映射时出现异常分析及其解决办法

 

关键字:

网络驱动器 Web应用程序 DirectoryNotFoundException 异常 IO 权限 machine.config

  近日有同事在调试系统时发现在Web程序里如果使用File.IO里的类操作映射网络驱动器时,会出现DirectoryNotFoundException 的异常。但同样的操作放在WinForm里的确实执行正常的。请教我是怎么回事。我在自己Windows 2000 Pro的机上用最简单的程序测试 也是如此。自然地想到是权限搞得鬼。于是把权限设定为最宽松的形式来试验:将ASP.NET帐号加入到Administrators组,同时把 Everyone用户加入到映射过来的网络驱动器上,并赋予最高权限。而网络驱动器映射则是以共享机上的Administrator身份来登陆的。 测试,仍然不行!

  比较困惑,在网上搜索了一下,都是说权限设置的。而涉及到网络驱动器映射的搜索结果比较少,而且提出的解决办法都没什么参 考价值。只有自己来研究了。

  在ASP.NET里,Web应用程序都是运行在一个特定的帐号身份下的进程里的。它所能访问的资源都和这个帐号权限有关。而用哪个帐 号可以通过machine.config文件里的processModel节点设定。默认情况下,是使用ASPNET帐号的(userName属性设为machine)。如果 贪图方便的,把userName设为SYSTEM则是使用SYSTEM的特殊帐号,拥有最大的权限。但光是改这个,无论怎么设,都是会出现异常的。 这时我突然想到建立网络驱动器连接时是用共享机上的Administrator帐号登陆的,但Web应用程序是用另一个帐号运行的,是不是和这 个有关呢?经后面的验证看来也确实是因为这个“简单”的原因。问题的关键就是在建立网络驱动器连接时,要用Web应用程序所使用的 帐号来连接。其实这是不同的机上的帐号,但就是要设置为一致才能正常运行。

  下面以我总结的解决方法步骤:
1、先明确Web应用程序是以哪个身份运行的。这可以通过查看machine.config文件的processModel节点userName属性看到。如果为 machine,就是用ASPNET帐号,如果为SYSTEM,就是SYSTEM帐号(这个是无法用来登陆连接到共享机上的,必需使用其它帐号)。 如果系统是Windows 2003,帐号可能还会有所不同。请查看参考资料链接里的那个回帖。
2、在共享机上用相同帐号相同密码建立帐号。并赋予该帐号应有的读写权限。如果使用的是默认的ASPNET帐号,因为无法获得密码, 可能还要在运行Web程序的机上重置该帐号的密码。如果重置了ASPNET密码,还要注意修改machine.config文件,将processModel 节点的password属性(默认为Autogenerate)改为你设置的密码。
3、用该帐号(该例子为ASPNET)建立网络驱动器映射。
4、运行程序,看是不是可以了 :)

  这里涉及到两台机上要建立相同的帐号,可能会有些麻烦。如果有更好的解决办法请告知。还有就是对于Windows 2003系统因帐号的问 题可能解决办法会有些出入,也望有测试过的人能多提供经验。

参考资料:

  1. Problem Creating Directory

转载于:https://www.cnblogs.com/fking/archive/2005/07/27/200925.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值