C#程序中模拟帐号登录

前段时间在移动那里服务器A要获取服务器B上的文件,无奈部署在服务器A上的程序是windows服务,不能通过“\\10.246.*.*\download”这样的类似路径来获取,这样获取的话程序总是会判断出路径下的文件不存在,因为服务是没有帐号权限的,故要虚拟一个有权限连到服务器B的帐号出来获取文件,虚拟程序代码如下:


using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Security.Principal;
using  System.Runtime.InteropServices;
using  System.IO;
 
namespace  ConsoleApplication3
{
     internal  static  class  WinLogonHelper
     {
         /// <summary>
         /// 模拟windows登录域
         /// </summary>
         [DllImport( "advapi32.DLL" , SetLastError = true )]
         public  static  extern  int  LogonUser( string  lpszUsername, string  lpszDomain, string  lpszPassword, int  dwLogonType, int  dwLogonProvider, ref  IntPtr phToken);
     }
 
     class  Program
     {
         static  void  Main( string [] args)
         {
             IntPtr admin_token = default (IntPtr);
             WindowsIdentity wid_admin = null ;
             WindowsImpersonationContext wic = null ;
 
             //在程序中模拟域帐户登录
             if  (WinLogonHelper.LogonUser( "uid" , "serverdomain" , "pwd" , 9, 0, ref  admin_token) != 0)
             {
                 using  (wid_admin = new  WindowsIdentity(admin_token))
                 {
                     using  (wic = wid_admin.Impersonate())
                     {
                         //假定要操作的文件路径是10.0.250.11上的d:\txt.txt文件可以这样操作
                         FileInfo file = new  FileInfo( @"\\10.0.250.11\d$\txt.txt" );
                         //想做什么操作就可以做了
                     }
                 }
             }
         }
     }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值