大家好!
小弟碰到一个问题;
由于在user用户组中的用户,在c:\program files文件下面的所有文件夹都是只读的,
而现在小弟做了一个软件,需要在它下面产生一个临时文件,但执行都“拒绝访问”;请问各位有没方法,在程序里控制“c:\program files\xx_tmp”文件夹可以进行文件读写的方法
小弟碰到一个问题;
由于在user用户组中的用户,在c:\program files文件下面的所有文件夹都是只读的,
而现在小弟做了一个软件,需要在它下面产生一个临时文件,但执行都“拒绝访问”;请问各位有没方法,在程序里控制“c:\program files\xx_tmp”文件夹可以进行文件读写的方法
解决方案 »
- 请问如何将excel中的文字导入到datagridview控件上?
- combobox显示和保存的不一样?怎么实现?
- 在同一目录中有两个aspx,1.aspx和2.aspx,我想在1.aspx中动态的把2.aspx嵌进来,有什么好的办法么,不用iframe的方式
- 有没有办法在知道某个名字或者某个类型的情况下 实现想对应的实例化对象
- 如何用.net制作Com组件(在线等待,各位大侠救命!!)
- 入门级难题,难倒了我,System.DBNull.Value的问题
- 没有用的成员,如何取消警告
- 急,我怎么把二进制data转换成json字符串
- 始学C#,需要下载安装什么软件及购买什么入门书?
- 水晶报表不能横向打印
- 再求救:我可以用process类的某些方法判断某一进程是否已结束吗?怎么写?
- 主窗体默认启动时为最大化,可是其它窗体启动时也变为最大化,可是并没有设置最大化,不知道为什么?
public const int LOGON32_PROVIDER_DEFAULT = 0;WindowsImpersonationContext impersonationContext; [DllImport("advapi32.dll", CharSet=CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
public extern static int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);public void 你的函数啦啦啦~~~~()
{
//使用有权限用户,域名(工作组中是机器名),密码模拟用户
if(impersonateValidUser("username", "domain", "password"))
{
//在这里执行你的写操作 undoImpersonation(); // 结束身份模拟
}
else
{
//发生异常 身份模拟失败了
}
}private bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero; if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();
}
然后就可以对xx_tmp进行write操作了