WNetAddConnection2 在 Windows 2008 R2 中不起作用
Posted
技术标签:
【中文标题】WNetAddConnection2 在 Windows 2008 R2 中不起作用【英文标题】:WNetAddConnection2 does not work from Windows 2008 R2 【发布时间】:2011-11-08 07:08:34 【问题描述】:我正在尝试使用 WNetAddConnection2 通过我的 ASP.NET Web 应用程序连接到网络位置。当我使用与 VS2010 一起提供的 ASP.NET 开发服务器对其进行调试时,一切都运行良好。但是当我在 Windows Server 2008 R2 中部署代码时,它不会放置文件并引发 Win32 异常,错误代码为 0X80004005。应用程序池身份是网络服务,我正在使用域用户帐户进行代理。
我已经使用该命令检查了连接性和用户名密码的有效性,它在服务器 runas /netonly /user:DOMAIN\User "explorer.exe \Path" 上运行良好
另请注意,我的防火墙已关闭,并且我没有在 Windows Server 2008 上运行防病毒软件。
非常感谢任何帮助。
我使用了How to provide user name and password when connecting to a network share的示例代码
【问题讨论】:
【参考方案1】:从 Windows Vista 开始,Windows 服务在安全方面的行为有所不同,并且不允许任何“与桌面相关的活动”(例如挂载某些东西)...
ASP.NET 在作为服务运行的 IIS 下运行 - 您尝试的操作不受支持,只能通过规避权限等问题来实现。
不确定您要达到的目标是什么?
也许有不同的方式来实现这个目标......
【讨论】:
我的 ASP.NET 应用程序生成一个 CSV 文件,我需要将它放到网络路径(具有特定权限)。另一种方法是在本地创建此 CSV 并使用另一个程序(Windows servive 或计划任务控制台应用程序)来选择此文件并拖放到网络位置。认为这是最简单的方法 - 基于人们得到这个工作的文章...corner-house.blogspot.com/2006/03/… 我理解那段代码,但正如我所说:Vista 改变了这些事情,如果你不想认真地处理权限,你就不能让它以这种方式工作......我建议只需生成 CSV,将其存储在本地,任何需要它的人都可以通过 HTTP URL / GET 获取...这可以是计划作业或真正在服务之外运行的任何应用程序... 我已将代码移至配置了计划任务的控制台应用程序。但是,我看到 WNetAddConnection2 的间歇性行为。他们还有其他方式连接到网络共享吗?该代码工作了一次,但之后它失败并出现同样的错误。 驱动器不只是通过 Windows 资源管理器永久映射一次并随后被控制台程序使用的任何原因? 是的,但是(当用户注销时)您的控制台应用程序也没有运行,或者?并且当用户再次登录时,映射又回来了 - 至少当你做的时候是持久的......【参考方案2】:WNetUseConnection 将起作用,我们需要正确定义它的所有结构。 WNetUseConnection(IntPtr.Zero, nr, 密码, 用户名, 0, null, null, null);
【讨论】:
以上是关于WNetAddConnection2 在 Windows 2008 R2 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
WNetAddConnection2 返回错误 1200 - 本地名称有效