关于C#编写的服务中使用了WNetAddConnection2出现错误的问题

问题描述

大家好,最近做一个Windows服务是监听某光驱,一旦光驱有光盘时自动读取内容,并通过共享文件的方式传输到服务器上。于是在网上找到了WNetAddConnection2的WindowsAPI函数,通过此函数建立磁盘映射,例如:将\192.168.0.1Share文件夹映射成本地磁盘的P:在控制台程序中没有发生问题,映射磁盘和断开映射都非常成功。但是将程序整理到C#写的Windows服务时,在调用WNetAddConnection2总是返回1312值(正常是返回0表示创建成功)不明白为什么发生这种情况,请教版里的各位大神,这是为什么?是因为Windows服务的权限问题吗?还是WNetAddConnection2还依赖别的服务?

解决方案

解决方案二:
有没有人来回答下,我正好也碰到这个问题,求助下
解决方案三:
publicstaticclassDrived{publicenumERROR_ID{ERROR_SUCCESS=0,//SuccessERROR_ACCESS_DENIED=5,ERROR_NOT_ENOUGH_MEMORY=8,ERROR_READ_FAULT=30,Windows_cannot_find_the_network_path=51,ERROR_BAD_NETPATH=53,ERROR_NETWORK_BUSY=54,ERROR_NETWORK_ACCESS_DENIED=65,ERROR_BAD_DEV_TYPE=66,ERROR_BAD_NET_NAME=67,ERROR_REQ_NOT_ACCEP=71,ERROR_ALREADY_ASSIGNED=85,ERROR_INVALID_PASSWORD=86,ERROR_INVALID_PARAMETER=87,ERROR_OPEN_FAILED=110,ERROR_INVALID_LEVEL=124,ERROR_BUSY=170,ERROR_MORE_DATA=234,ERROR_NO_BROWSER_SERVERS_FOUND=6118,ERROR_NO_NETWORK=1222,ERROR_INVALID_HANDLE_STATE=1609,ERROR_EXTENDED_ERROR=1208,ERROR_DEVICE_ALREADY_REMEMBERED=1202,ERROR_NO_NET_OR_BAD_PATH=1203,the_user_has_not_been_granted_the_requested_logon_type_at_this_computer=1385,unknown_user_name_or_bad_password=1326,ERROR_ACCOUNT_RESTRICTION=1327,ERROR_INVALID_WORKSTATION=1329,logon_request_contained_an_invalid_logon_type_value=1367,}publicenumRESOURCE_SCOPE{RESOURCE_CONNECTED=1,RESOURCE_GLOBALNET=2,RESOURCE_REMEMBERED=3,RESOURCE_RECENT=4,RESOURCE_CONTEXT=5}publicenumRESOURCE_TYPE{RESOURCETYPE_ANY=0,RESOURCETYPE_DISK=1,RESOURCETYPE_PRINT=2,RESOURCETYPE_RESERVED=8,}publicenumRESOURCE_USAGE{RESOURCEUSAGE_CONNECTABLE=1,RESOURCEUSAGE_CONTAINER=2,RESOURCEUSAGE_NOLOCALDEVICE=4,RESOURCEUSAGE_SIBLING=8,RESOURCEUSAGE_ATTACHED=16,RESOURCEUSAGE_ALL=(RESOURCEUSAGE_CONNECTABLE|RESOURCEUSAGE_CONTAINER|RESOURCEUSAGE_ATTACHED),}publicenumRESOURCE_DISPLAYTYPE{RESOURCEDISPLAYTYPE_GENERIC=0,RESOURCEDISPLAYTYPE_DOMAIN=1,RESOURCEDISPLAYTYPE_SERVER=2,RESOURCEDISPLAYTYPE_SHARE=3,RESOURCEDISPLAYTYPE_FILE=4,RESOURCEDISPLAYTYPE_GROUP=5,RESOURCEDISPLAYTYPE_NETWORK=6,RESOURCEDISPLAYTYPE_ROOT=7,RESOURCEDISPLAYTYPE_SHAREADMIN=8,RESOURCEDISPLAYTYPE_DIRECTORY=9,RESOURCEDISPLAYTYPE_TREE=10,RESOURCEDISPLAYTYPE_NDSCONTAINER=11}[StructLayout(LayoutKind.Sequential)]publicstructNETRESOURCE{publicRESOURCE_SCOPEdwScope;publicRESOURCE_TYPEdwType;publicRESOURCE_DISPLAYTYPEdwDisplayType;publicRESOURCE_USAGEdwUsage;[MarshalAs(UnmanagedType.LPStr)]publicstringlpLocalName;[MarshalAs(UnmanagedType.LPStr)]publicstringlpRemoteName;[MarshalAs(UnmanagedType.LPStr)]publicstringlpComment;[MarshalAs(UnmanagedType.LPStr)]publicstringlpProvider;}publicclassNetworkConnection{[DllImport("mpr.dll")]publicstaticexternintWNetAddConnection2(NETRESOURCE[]lpNetResource,stringlpPassword,stringlpUserName,intdwFlags);[DllImport("mpr.dll")]publicstaticexternintWNetCancelConnection2(stringsharename,intdwFlags,intfForce);publicstaticintConnect(stringremotePath,stringlocalPath,stringusername,stringpassword){NETRESOURCE[]share_driver=newNETRESOURCE[1];share_driver[0].dwScope=RESOURCE_SCOPE.RESOURCE_GLOBALNET;share_driver[0].dwType=RESOURCE_TYPE.RESOURCETYPE_DISK;share_driver[0].dwDisplayType=RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;share_driver[0].dwUsage=RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;share_driver[0].lpLocalName=localPath;share_driver[0].lpRemoteName=remotePath;Disconnect(localPath);intret=WNetAddConnection2(share_driver,password,username,1);returnret;}publicstaticintDisconnect(stringlocalpath){returnWNetCancelConnection2(localpath,1,1);}}}

我用这段,可以映射成功

时间: 2024-09-26 03:57:04

关于C#编写的服务中使用了WNetAddConnection2出现错误的问题的相关文章

虚机服务中常见Asp.Net低级错误一览_XML/RSS

"/"应用程序中的服务器错误. -------------------------------------------------------------------------------- 运行时错误 说明: 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程查看应用程序错误的详细信息(出于安全原因).但可以通过在本地服务器计算机上运行的浏览器查看. 详细信息: 若要使他人能够在远程计算机上查看此特定错误信息的详细信息,请在位于当前 Web 应用程序根目录下的&quo

如何在Ruby中编写微服务?

[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采用微服务架构.但是,又有多少相关教程呢?我们来看看这篇关于用Ruby编写微服务的文章吧. 人人都在讨论微服务,但我至今也没见过几篇有关用Ruby编写微服务的.像样的教程.这可能是因为许多Ruby开发人员仍然最喜欢Rails架构(这没什么不好,Rails本身也没什么不好,但是Ruby可以做到的事还有很

用托管C++编写Windows服务

多年以来,只要提到编写Windows服务,就会想到用Visual C++编写,同时,这也是其中一件C++程序员可以做,而VB程序员不可以做的事情.以前,我们只称其为"服务"或"NT服务",现在,它们被命名为"Windows服务",而且用VB.NET或C#也可以很容易地编写. 但是,如果你想用托管C++来编写呢?毕竟,大多数有经验的Visual C++程序员都会写过一两个服务,也会知道怎样完成一个类似的工程.假设你有一个必须要一直运行以提供服务的程

C#编写Windows服务的基本过程

  编写Windows服务是一种比较高级的编程技术,内部使用了很多Windows操作系统的核心功能,但微软.NET框架已经很好的封装了这些技术细节,使得我们可以很方便的使用C#编写自己的Windows服务,其基本过程一般为 1.创建C#工程.创建一个EXE工程,可以是WinForm或者命令行格式的.添加对System.ServiceProcess.dll和System.Configuration.Install.dll的引用. 2. 创建服务类.新增一个类,该类型继承System.Service

编写WCF服务时右击配置文件无“Edit WCF Configuration”(编辑 WCF 配置)远程的解决办法

原文:编写WCF服务时右击配置文件无"Edit WCF Configuration"远程的解决办法 今天在看<WCF揭秘>书中看到作者提出可以在一个WCF Host应用程序的App.Config文件上右击, 通过弹出的" Edit WCF Configuration"(编辑WCF配置)选项来利用GUI界面编辑WCF的配置信息. 但是我在尝试的时候并没有找到这个右键菜单,开始还以为作者弄错了,但又尝试了一会后便发现了窍门. 右键App.Config文件默认

应用程序-c++编写驱服务级别的程序的问题

问题描述 c++编写驱服务级别的程序的问题 #include "stdafx.h" #include #include #include using namespace std; void WINAPI MyServiceMain(DWORD, LPTSTR *); //服务主体函数 void WINAPI MyServiceCtrlHandle(DWORD Opcode); //服务控制函数 SERVICE_STATUS m_ServiceStatus; //包含当前服务状态的信息

【求助】分布式系统如何编写设备服务

问题描述 在分布式的系统中,要控制一些外围设备,如远程的打卡机(RS485通讯方式),程序对外围设备的调用要写成服务的方式!我是新手,请教怎样编写这样的服务,具体是一个什么样的步骤??我不会要大家提供代码,大家只要告诉我怎样编写这样的东西即可,比如:建一个什么工程-->定义什么接口-->怎样继承实现....非常感谢大家,祝CSDN的朋友都新年快乐,万事顺心!! 解决方案 解决方案二:建一个WINservice工程就可以了.你想实现什么功能就定义什么接口.没说明重点解决方案三:我想实现的功能是:

请教:VB.net 如何编写【服务】?

问题描述 请教:VB.net如何编写[服务]?程序目的:此程序在服务器上运行,定时从外网下载邮件,将所有信息转换,存储到内网SQL服务器.以SQL数据的形式,供[内网电脑]共享.我希望:此程序在服务器上,一直运行.并且,允许[内网电脑]触发,立即刷新(外网下载邮件).主要的难点是,如何在服务器上触发[程序的刷新].可以由[内网电脑]发送SQL命令到服务器,启动SQL的某个"存储过程",再由"存储过程"在服务器上启动一个程序.现在,我不知道如何在同一台电脑上,一个程序

一步一步教您用C#编写window服务教程

我在编写服务过程中参考了 Professional C# 2012 and .NET 4.5 第一步,创建一个解决方案名称MonitoringFish 不废话,你肯定会,会的直接去下一步.如果真的不会请继续看     第二步添加服务用的类库项目Sensor 并添加类文件QuoteException.cs和SensorFish.cs 这两个类的功能并不重要,主要是给服务类用的,你也可以写自己的类文件,或者干脆不要,直接在服务类里边写逻辑代码 QuoteException.cs代码如下: using