如题,在程序中向指定的网络路径下写文件,提示Logon failure: unknown user name or bad password 这个错误,但向本地写文件时是可以的。

解决方案 »

  1.   

    我用单独的c#程序(不需要登陆)可以向同样的目录写文件的啊,
    我用.NET程序(需要登陆)就出现那个错误,
    难道这个是因为没有权限吗?
      

  2.   

    是不是应该在写之前,再登陆一次程序啊?
    下面是一段VB代码,
    有点看不懂:
    Imports System.Security.Principal
    Imports System.Runtime.InteropServices
    Public Class UserManager
        Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As String, _
         ByVal lpszDomain As String, ByVal lpszPassword As String, ByVal dwLogonType As Integer, _
         ByVal dwLogonProvider As Integer, ByRef phToken As IntPtr) As Integer
        Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Boolean
        Public Shared Sub CreateIdentity(ByVal User As String, ByVal Domain As String, ByVal Password As String)
            Dim tokenHandle As New IntPtr(0)
            Dim ret As Integer
            Dim LOGON32_PROVIDER_DEFAULT As Integer = 0
            Dim LOGON32_LOGON_NETWORK_CLEARTEXT As Integer = 3
            tokenHandle = IntPtr.Zero
            Dim returnValue As Boolean = LogonUser(User, Domain, Password, LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, tokenHandle)
            If False = returnValue Then
                ret = Marshal.GetLastWin32Error()
                Throw New Exception("LogonUser failed with error code: " + ret)
            End If
            Dim id As New WindowsIdentity(tokenHandle)
            CloseHandle(tokenHandle)
            id.Impersonate()
        End Sub
    End Class
      

  3.   

    单独的c#程序!=.NET程序???奇也怪哉...
      

  4.   

    不好意思,写错了!
    一个Win可以真常读写,Web程序就不可以哦
      

  5.   

    web程序使用的匿名账户运行的, winform使用的是当前登录的账户。
    web中遇到这样的操作一般使用web.config的模拟即可。
    模拟怎么写?
    http://msdn2.microsoft.com/zh-CN/library/xh507fc5(VS.80).aspxhttp://msdn2.microsoft.com/zh-cn/library/134ec8tc(VS.80).aspx<identity impersonate="true" userName="机器名\账户" password="登录密码" >.
      

  6.   

    真心感谢:
          net_lover(【孟子E章】)
            热情帮助。
    我是这样解决的:
      [DllImport("advapi32.dll", SetLastError = true)]
        private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
                   int dwLogonType, int dwLogonProvider, ref IntPtr phToken);    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        private extern static bool CloseHandle(IntPtr handle);    public static void CreateIdentity(string User, string Domain, string Password)
        {
            // The Windows NT user token.
            IntPtr tokenHandle = new IntPtr(0);        const int LOGON32_PROVIDER_DEFAULT = 0;
            const int LOGON32_LOGON_NETWORK_CLEARTEXT = 3;        tokenHandle = IntPtr.Zero;        bool returnValue = LogonUser(User, Domain, Password,
                 LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT,
                 ref tokenHandle);
            if (false == returnValue)
            {
                int ret = Marshal.GetLastWin32Error();
                throw new Exception("LogonUser failed with error code: " + ret);
            }
            WindowsIdentity id = new WindowsIdentity(tokenHandle);
            CloseHandle(tokenHandle);
            id.Impersonate();
        }
    我在向指定网络路径写文件时,先调用这个函数。
    不过现在遇到访问权限问题:
    网络路径在web.config中如此设置:
    <appSettings>
        <add key="PathOfMarketingAutoMailList" value="\\Rockxp/Wood Share/"/>
      </appSettings>
    指定文件的权限已经分配给 Network Server账户,同时也分配给需要操作此文件的用户。
    但要在此文件夹下创建TXT文件时提示:Access to the path'\\Rockxp\Wood Share\Temp.txt'is denied.我刚学c#.net,尽问些简单的问题,让大家见笑了。不过请大家不要嘲笑!
      

  7.   

    【孟子E章】:
        请您HELP...
      

  8.   

    const int LOGON32_LOGON_NETWORK_CLEARTEXT = 3;
    把3改为2