Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WNetUseConnection在第二次连接时返回1312_C#_Asp.net_File_Connection_Remote Access - Fatal编程技术网

C# WNetUseConnection在第二次连接时返回1312

C# WNetUseConnection在第二次连接时返回1312,c#,asp.net,file,connection,remote-access,C#,Asp.net,File,Connection,Remote Access,我有一个窗口服务,可以访问其他服务器上共享文件夹中的文件(使用用户名和密码)。在服务第一次启动时,在服务器上连接没有问题,但当它循环或停止并启动窗口服务时,WNetUseConnection始终返回错误:1231。有什么问题吗 以下是连接的调用: NetworkShare.ConnectToShare(@\\192.168.XX.XXX\images, *username*, *pw*); NetworkShare.DisconnectFromShare(@\\192.168.XX.XXX\i

我有一个窗口服务,可以访问其他服务器上共享文件夹中的文件(使用用户名和密码)。在服务第一次启动时,在服务器上连接没有问题,但当它循环或停止并启动窗口服务时,WNetUseConnection始终返回错误:1231。有什么问题吗

以下是连接的调用:

NetworkShare.ConnectToShare(@\\192.168.XX.XXX\images, *username*, *pw*);

NetworkShare.DisconnectFromShare(@\\192.168.XX.XXX\images, true);
/// <summary>
/// ネットワーク接続クラス
/// </summary>
public class NetworkShare
{
    /// <summary>
    /// リモート共有に接続します
    /// </summary>
    /// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
    public static string ConnectToShare(string uri, string username, string password)
    {
        //ネットリソースを作成し、共有に向けます
        NETRESOURCE nr = new NETRESOURCE();
        nr.dwType = RESOURCETYPE_DISK;
        nr.lpRemoteName = uri;

        //共有を作成する
        int ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);

        //エラーをチェックする
        if (ret == NO_ERROR)
            return null;
        else
            return GetError(ret);
    }

    /// <summary>
    /// キャッシュから共有を削除します。
    /// </summary>
    /// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
    public static string DisconnectFromShare(string uri, bool force)
    {
        //共有を削除する
        int ret = WNetCancelConnection(uri, force);

        //エラーをチェックする
        if (ret == NO_ERROR)
            return null;
        else
            return GetError(ret);
    }

    #region P/Invoke Stuff
    /// <summary>
    /// 共有を作成する
    /// </summary>
    [DllImport("Mpr.dll")]
    private static extern int WNetUseConnection(
        IntPtr hwndOwner,
        NETRESOURCE lpNetResource,
        string lpPassword,
        string lpUserID,
        int dwFlags,
        string lpAccessName,
        string lpBufferSize,
        string lpResult
        );

    /// <summary>
    /// 共有を削除する
    /// </summary>
    [DllImport("Mpr.dll")]
    private static extern int WNetCancelConnection(
        string lpName,
        bool fForce
        );

    /// <summary>
    /// ネットリソース
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    private class NETRESOURCE
    {
        public int dwScope = 0;
        public int dwType = 0;
        public int dwDisplayType = 0;
        public int dwUsage = 0;
        public string lpLocalName = "";
        public string lpRemoteName = "";
        public string lpComment = "";
        public string lpProvider = "";
    }

    #region 定数
    /// <summary>
    /// リソースタイプディスク
    /// </summary>
    const int RESOURCETYPE_DISK = 0x00000001;

    /// <summary>
    /// 接続更新プロファイル
    /// </summary>
    const int CONNECT_UPDATE_PROFILE = 0x00000001;
    #endregion

    #region エラー
    /// <summary>
    /// エラーなし
    /// </summary>
    const int NO_ERROR = 0;

    /// <summary>
    /// アクセスが拒否されました
    /// </summary>
    const int ERROR_ACCESS_DENIED = 5;

    /// <summary>
    /// 割り当て済み
    /// </summary>
    const int ERROR_ALREADY_ASSIGNED = 85;

    /// <summary>
    /// 悪いデバイス
    /// </summary>
    const int ERROR_BAD_DEVICE = 1200;

    /// <summary>
    /// 不正なネットワーク名
    /// </summary>
    const int ERROR_BAD_NET_NAME = 67;

    /// <summary>
    /// 悪いプロバイダー
    /// </summary>
    const int ERROR_BAD_PROVIDER = 1204;

    /// <summary>
    /// キャンセル
    /// </summary>
    const int ERROR_CANCELLED = 1223;

    /// <summary>
    /// 拡張エラー
    /// </summary>
    const int ERROR_EXTENDED_ERROR = 1208;

    /// <summary>
    /// 無効なアドレス
    /// </summary>
    const int ERROR_INVALID_ADDRESS = 487;

    /// <summary>
    /// 無効なパラメーター
    /// </summary>
    const int ERROR_INVALID_PARAMETER = 87;

    /// <summary>
    /// 無効なパスワード
    /// </summary>
    const int ERROR_INVALID_PASSWORD = 1216;

    /// <summary>
    /// より多くのデータ
    /// </summary>
    const int ERROR_MORE_DATA = 234;

    /// <summary>
    /// アイテムはありません
    /// </summary>
    const int ERROR_NO_MORE_ITEMS = 259;

    /// <summary>
    /// ネットがないか悪いパス
    /// </summary>
    const int ERROR_NO_NET_OR_BAD_PATH = 1203;

    /// <summary>
    /// ネットワークなし
    /// </summary>
    const int ERROR_NO_NETWORK = 1222;

    /// <summary>
    /// セッション機密の競合
    /// </summary>
    const int ERROR_SESSION_CREDENTIAL_CONFLICT = 1219;

    /// <summary>
    /// 悪いプロファイル
    /// </summary>
    const int ERROR_BAD_PROFILE = 1206;

    /// <summary>
    /// プロファイルを開けません
    /// </summary>
    const int ERROR_CANNOT_OPEN_PROFILE = 1205;

    /// <summary>
    /// 使用中のデバイス
    /// </summary>
    const int ERROR_DEVICE_IN_USE = 2404;

    /// <summary>
    /// 接続されていません
    /// </summary>
    const int ERROR_NOT_CONNECTED = 2250;

    /// <summary>
    /// エラーファイルを開く
    /// </summary>
    const int ERROR_OPEN_FILES = 2401;

    /// <summary>
    /// エラークラス
    /// </summary>
    private struct ErrorClass
    {
        public int num;
        public string message;
        public ErrorClass(int num, string message)
        {
            this.num = num;
            this.message = message;
        }
    }

    /// <summary>
    /// エラーメッセージリスト
    /// </summary>
    private static ErrorClass[] ERROR_LIST = new ErrorClass[] {
        new ErrorClass(ERROR_ACCESS_DENIED, "エラー:アクセスが拒否されました"), 
        new ErrorClass(ERROR_ALREADY_ASSIGNED, "エラー:割り当て済み"), 
        new ErrorClass(ERROR_BAD_DEVICE, "エラー:不正なデバイス"), 
        new ErrorClass(ERROR_BAD_NET_NAME, "エラー:不正なネット名"), 
        new ErrorClass(ERROR_BAD_PROVIDER, "エラー:不正なプロバイダー"), 
        new ErrorClass(ERROR_CANCELLED, "エラー:キャンセルされました"), 
        new ErrorClass(ERROR_EXTENDED_ERROR, "エラー:拡張エラー"), 
        new ErrorClass(ERROR_INVALID_ADDRESS, "エラー:無効なアドレス"), 
        new ErrorClass(ERROR_INVALID_PARAMETER, "エラー:無効なパラメーター"), 
        new ErrorClass(ERROR_INVALID_PASSWORD, "エラー:無効なパスワード"), 
        new ErrorClass(ERROR_MORE_DATA, "エラー:追加データ"), 
        new ErrorClass(ERROR_NO_MORE_ITEMS, "エラー:これ以上アイテムはありません"), 
        new ErrorClass(ERROR_NO_NET_OR_BAD_PATH, "エラー:ネットなしまたは不良パス"), 
        new ErrorClass(ERROR_NO_NETWORK, "エラー:ネットワークなし"), 
        new ErrorClass(ERROR_BAD_PROFILE, "エラー:不正なプロファイル"), 
        new ErrorClass(ERROR_CANNOT_OPEN_PROFILE, "エラー:プロファイルを開けません"), 
        new ErrorClass(ERROR_DEVICE_IN_USE, "エラー:使用中のデバイス"), 
        new ErrorClass(ERROR_NOT_CONNECTED, "エラー:接続されていません"), 
        new ErrorClass(ERROR_OPEN_FILES, "エラー:ファイルを開く"), 
        new ErrorClass(ERROR_SESSION_CREDENTIAL_CONFLICT, "エラー:資格情報の競合"),
    };

    /// <summary>
    /// エラーリストでエラーを取得する
    /// </summary>
    /// <param name="errNum">エラーコード</param>
    /// <returns>エラーメッセージ</returns>
    private static string GetError(int errNum)
    {
        foreach (ErrorClass er in ERROR_LIST)
        {
            if (er.num == errNum) return er.message;
        }
        return "エラー:不明, " + errNum;
    }
以下是连接的代码:

NetworkShare.ConnectToShare(@\\192.168.XX.XXX\images, *username*, *pw*);

NetworkShare.DisconnectFromShare(@\\192.168.XX.XXX\images, true);
/// <summary>
/// ネットワーク接続クラス
/// </summary>
public class NetworkShare
{
    /// <summary>
    /// リモート共有に接続します
    /// </summary>
    /// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
    public static string ConnectToShare(string uri, string username, string password)
    {
        //ネットリソースを作成し、共有に向けます
        NETRESOURCE nr = new NETRESOURCE();
        nr.dwType = RESOURCETYPE_DISK;
        nr.lpRemoteName = uri;

        //共有を作成する
        int ret = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);

        //エラーをチェックする
        if (ret == NO_ERROR)
            return null;
        else
            return GetError(ret);
    }

    /// <summary>
    /// キャッシュから共有を削除します。
    /// </summary>
    /// <returns>成功した場合はnull、それ以外の場合はエラーメッセージ。</returns>
    public static string DisconnectFromShare(string uri, bool force)
    {
        //共有を削除する
        int ret = WNetCancelConnection(uri, force);

        //エラーをチェックする
        if (ret == NO_ERROR)
            return null;
        else
            return GetError(ret);
    }

    #region P/Invoke Stuff
    /// <summary>
    /// 共有を作成する
    /// </summary>
    [DllImport("Mpr.dll")]
    private static extern int WNetUseConnection(
        IntPtr hwndOwner,
        NETRESOURCE lpNetResource,
        string lpPassword,
        string lpUserID,
        int dwFlags,
        string lpAccessName,
        string lpBufferSize,
        string lpResult
        );

    /// <summary>
    /// 共有を削除する
    /// </summary>
    [DllImport("Mpr.dll")]
    private static extern int WNetCancelConnection(
        string lpName,
        bool fForce
        );

    /// <summary>
    /// ネットリソース
    /// </summary>
    [StructLayout(LayoutKind.Sequential)]
    private class NETRESOURCE
    {
        public int dwScope = 0;
        public int dwType = 0;
        public int dwDisplayType = 0;
        public int dwUsage = 0;
        public string lpLocalName = "";
        public string lpRemoteName = "";
        public string lpComment = "";
        public string lpProvider = "";
    }

    #region 定数
    /// <summary>
    /// リソースタイプディスク
    /// </summary>
    const int RESOURCETYPE_DISK = 0x00000001;

    /// <summary>
    /// 接続更新プロファイル
    /// </summary>
    const int CONNECT_UPDATE_PROFILE = 0x00000001;
    #endregion

    #region エラー
    /// <summary>
    /// エラーなし
    /// </summary>
    const int NO_ERROR = 0;

    /// <summary>
    /// アクセスが拒否されました
    /// </summary>
    const int ERROR_ACCESS_DENIED = 5;

    /// <summary>
    /// 割り当て済み
    /// </summary>
    const int ERROR_ALREADY_ASSIGNED = 85;

    /// <summary>
    /// 悪いデバイス
    /// </summary>
    const int ERROR_BAD_DEVICE = 1200;

    /// <summary>
    /// 不正なネットワーク名
    /// </summary>
    const int ERROR_BAD_NET_NAME = 67;

    /// <summary>
    /// 悪いプロバイダー
    /// </summary>
    const int ERROR_BAD_PROVIDER = 1204;

    /// <summary>
    /// キャンセル
    /// </summary>
    const int ERROR_CANCELLED = 1223;

    /// <summary>
    /// 拡張エラー
    /// </summary>
    const int ERROR_EXTENDED_ERROR = 1208;

    /// <summary>
    /// 無効なアドレス
    /// </summary>
    const int ERROR_INVALID_ADDRESS = 487;

    /// <summary>
    /// 無効なパラメーター
    /// </summary>
    const int ERROR_INVALID_PARAMETER = 87;

    /// <summary>
    /// 無効なパスワード
    /// </summary>
    const int ERROR_INVALID_PASSWORD = 1216;

    /// <summary>
    /// より多くのデータ
    /// </summary>
    const int ERROR_MORE_DATA = 234;

    /// <summary>
    /// アイテムはありません
    /// </summary>
    const int ERROR_NO_MORE_ITEMS = 259;

    /// <summary>
    /// ネットがないか悪いパス
    /// </summary>
    const int ERROR_NO_NET_OR_BAD_PATH = 1203;

    /// <summary>
    /// ネットワークなし
    /// </summary>
    const int ERROR_NO_NETWORK = 1222;

    /// <summary>
    /// セッション機密の競合
    /// </summary>
    const int ERROR_SESSION_CREDENTIAL_CONFLICT = 1219;

    /// <summary>
    /// 悪いプロファイル
    /// </summary>
    const int ERROR_BAD_PROFILE = 1206;

    /// <summary>
    /// プロファイルを開けません
    /// </summary>
    const int ERROR_CANNOT_OPEN_PROFILE = 1205;

    /// <summary>
    /// 使用中のデバイス
    /// </summary>
    const int ERROR_DEVICE_IN_USE = 2404;

    /// <summary>
    /// 接続されていません
    /// </summary>
    const int ERROR_NOT_CONNECTED = 2250;

    /// <summary>
    /// エラーファイルを開く
    /// </summary>
    const int ERROR_OPEN_FILES = 2401;

    /// <summary>
    /// エラークラス
    /// </summary>
    private struct ErrorClass
    {
        public int num;
        public string message;
        public ErrorClass(int num, string message)
        {
            this.num = num;
            this.message = message;
        }
    }

    /// <summary>
    /// エラーメッセージリスト
    /// </summary>
    private static ErrorClass[] ERROR_LIST = new ErrorClass[] {
        new ErrorClass(ERROR_ACCESS_DENIED, "エラー:アクセスが拒否されました"), 
        new ErrorClass(ERROR_ALREADY_ASSIGNED, "エラー:割り当て済み"), 
        new ErrorClass(ERROR_BAD_DEVICE, "エラー:不正なデバイス"), 
        new ErrorClass(ERROR_BAD_NET_NAME, "エラー:不正なネット名"), 
        new ErrorClass(ERROR_BAD_PROVIDER, "エラー:不正なプロバイダー"), 
        new ErrorClass(ERROR_CANCELLED, "エラー:キャンセルされました"), 
        new ErrorClass(ERROR_EXTENDED_ERROR, "エラー:拡張エラー"), 
        new ErrorClass(ERROR_INVALID_ADDRESS, "エラー:無効なアドレス"), 
        new ErrorClass(ERROR_INVALID_PARAMETER, "エラー:無効なパラメーター"), 
        new ErrorClass(ERROR_INVALID_PASSWORD, "エラー:無効なパスワード"), 
        new ErrorClass(ERROR_MORE_DATA, "エラー:追加データ"), 
        new ErrorClass(ERROR_NO_MORE_ITEMS, "エラー:これ以上アイテムはありません"), 
        new ErrorClass(ERROR_NO_NET_OR_BAD_PATH, "エラー:ネットなしまたは不良パス"), 
        new ErrorClass(ERROR_NO_NETWORK, "エラー:ネットワークなし"), 
        new ErrorClass(ERROR_BAD_PROFILE, "エラー:不正なプロファイル"), 
        new ErrorClass(ERROR_CANNOT_OPEN_PROFILE, "エラー:プロファイルを開けません"), 
        new ErrorClass(ERROR_DEVICE_IN_USE, "エラー:使用中のデバイス"), 
        new ErrorClass(ERROR_NOT_CONNECTED, "エラー:接続されていません"), 
        new ErrorClass(ERROR_OPEN_FILES, "エラー:ファイルを開く"), 
        new ErrorClass(ERROR_SESSION_CREDENTIAL_CONFLICT, "エラー:資格情報の競合"),
    };

    /// <summary>
    /// エラーリストでエラーを取得する
    /// </summary>
    /// <param name="errNum">エラーコード</param>
    /// <returns>エラーメッセージ</returns>
    private static string GetError(int errNum)
    {
        foreach (ErrorClass er in ERROR_LIST)
        {
            if (er.num == errNum) return er.message;
        }
        return "エラー:不明, " + errNum;
    }
//
/// ネットワーク接続クラス
/// 
公共类网络共享
{
/// 
/// リモート共有に接続します
/// 
/// 成功した場合は无效的それ以外の場合はエラーメッセージ。
公共静态字符串ConnectToShare(字符串uri、字符串用户名、字符串密码)
{
//ネットリソースを作成し、共有に向けます
NETRESOURCE nr=新的NETRESOURCE();
nr.dwType=资源类型\ U盘;
nr.lpRemoteName=uri;
//共有を作成する
int ret=WNetUseConnection(IntPtr.Zero,nr,密码,用户名,0,null,null,null);
//エラーをチェックする
如果(ret==无错误)
返回null;
其他的
返回GetError(ret);
}
/// 
/// キャッシュから共有を削除します。
/// 
/// 成功した場合は无效的それ以外の場合はエラーメッセージ。
公共静态字符串DisconnectFromShare(字符串uri,bool-force)
{
//共有を削除する
int-ret=WNetCancelConnection(uri,force);
//エラーをチェックする
如果(ret==无错误)
返回null;
其他的
返回GetError(ret);
}
#地区P/P
/// 
/// 共有を作成する
/// 
[DllImport(“Mpr.dll”)]
私有静态外部int WNetUseConnection(
IntPtr hwndOwner,
NETRESOURCE lpNetResource,
字符串密码,
字符串lpUserID,
int dwFlags,
字符串lpAccessName,
字符串大小,
字符串lpResult
);
/// 
/// 共有を削除する
/// 
[DllImport(“Mpr.dll”)]
私有静态外部内部所有者取消连接(
字符串名称,
布尔福斯
);
/// 
/// ネットリソース
/// 
[StructLayout(LayoutKind.Sequential)]
私有类网络资源
{
公共int dwScope=0;
公共int dwType=0;
public int dwDisplayType=0;
公共int dwUsage=0;
公共字符串lpLocalName=“”;
公共字符串lpRemoteName=“”;
公共字符串lpComment=“”;
公共字符串lpProvider=“”;
}
#区域定数
/// 
/// リソースタイプディスク
/// 
const int RESOURCETYPE_DISK=0x00000001;
/// 
/// 接続更新プロファイル
/// 
const int CONNECT_UPDATE_PROFILE=0x00000001;
#端区
#区域エラー
/// 
/// エラーなし
/// 
const int NO_ERROR=0;
/// 
/// アクセスが拒否されました
/// 
const int ERROR\u ACCESS\u DENIED=5;
/// 
/// 割り当て済み
/// 
const int ERROR_已分配=85;
/// 
/// 悪いデバイス
/// 
const int ERROR\u BAD\u DEVICE=1200;
/// 
/// 不正なネットワーク名
/// 
const int ERROR\u BAD\u NET\u NAME=67;
/// 
/// 悪いプロバイダー
/// 
const int ERROR\u BAD\u PROVIDER=1204;
/// 
/// キャンセル
/// 
const int ERROR_CANCELLED=1223;
/// 
/// 拡張エラー
/// 
const int ERROR\u EXTENDED\u ERROR=1208;
/// 
/// 無効なアドレス
/// 
const int ERROR\u INVALID\u ADDRESS=487;
/// 
/// 無効なパラメーター
/// 
const int ERROR\u无效\u参数=87;
/// 
/// 無効なパスワード
/// 
const int ERROR_INVALID_PASSWORD=1216;
/// 
/// より多くのデータ
/// 
const int ERROR\u MORE\u DATA=234;
/// 
/// アイテムはありません
/// 
const int ERROR\u NO\u MORE\u ITEMS=259;
/// 
/// ネットがないか悪いパス
/// 
const int ERROR\u NO\u NET\u或\u BAD\u PATH=1203;
/// 
/// ネットワークなし
/// 
const int ERROR_NO_NETWORK=1222;
/// 
/// セッション機密の競合
/// 
const int ERROR\u SESSION\u CREDENTIAL\u CONFLICT=1219;
/// 
/// 悪いプロファイル
/// 
const int ERROR\u BAD\u PROFILE=1206;
/// 
/// プロファイルを開けません
/// 
const int ERROR\u无法打开\u PROFILE=1205;
/// 
/// 使用中のデバイス
/// 
const int ERROR\u DEVICE\u IN\u USE=2404;
/// 
/// 接続されていません
/// 
const int ERROR_NOT_CONNECTED=2250;
/// 
/// エラーファイルを開く
/// 
const int ERROR_OPEN_FILES=2401;
/// 
/// エラークラス
/// 
私有结构错误类
{
公共整数;
公共字符串消息;
公共错误类(整数,字符串消息)
{
this.num=num;
this.message=消息;
}
}
/// 
/// エラーメッセージリスト
/// 
私有静态ErrorClass[]错误\u列表=新的ErrorClass[]{
新的ErrorClass(错误访问被拒绝,“エラー:アクセスが拒否されました"), 
新的ErrorClass(已分配错误)エラー:割り当て済み"), 
新的ErrorClass(错误\u坏的\u设备,“エラー:不正なデバイス"), 
新的ErrorClass(错误\u错误\u网络\u名称,“エラー:不正なネット名"), 
新的ErrorClass(错误\u错误\u提供程序,“エラー:不正なプロバイダー"), 
新的ErrorClass(错误\u已取消,“エラー:キャンセルされました"), 
新错误类(错误扩展错误)エラー:拡張エラー"), 
新的ErrorClass(错误\u无效\u地址,“エラー:無?