前段时间在移动那里服务器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"
);
//想做什么操作就可以做了
}
}
}
}
}
}