我在程序里新开了一个线程
    WindowsIdentity identity= WindowsIdentity.GetCurrent();
    string username = identity.Name;//是否这么写我忘了,得到userName是IUser_MachineName
    ThreadStart threadStart = new ThreadStart(myMethod);
    Thread thread = new Thread(threadStart);
    thread.Start();在myMethod方法里是对存储在本地磁盘上的word模板进行操作,返回exception说“拒绝访问”。但是在该方法里执行
  WindowsIdentity identity= WindowsIdentity.GetCurrent();
    string username = identity.Name;
得到username是NetWork Service,我估计问题出在新开的线程运行身份不对(我没写过线程,术语可能不对)。请教各位如何把新开的线程的运行身份该成IUser_MachineName?

解决方案 »

  1.   

    不会吧 
    下面的代码 在我的机器上测试都是当前用户啊
    怎么会是IUser_MachineName?        private void button1_Click(object sender, EventArgs e)
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                string username = identity.Name;
                Text = username;
                ThreadStart threadStart = new ThreadStart(DoMoreWork);
                Thread thread = new Thread(threadStart);
                thread.Start();
            }        public void DoMoreWork()
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                string username = identity.Name;
                Text = username;
            }
      

  2.   

    你先看看不用线程是否能打开word。
      

  3.   

    不能打开,调用新建word的方法时,就抛出异常高手来了,你一直解决我的问题啊knight,呵呵
      

  4.   

    如果是B/S系统,肯定会有问题了,因为你通过IIS访问的,权限很低的。所以会“拒绝访问”
    除非不说了,太危险的操作了。
      

  5.   

    我把搜到的解决方法贴到这里吧,还没试正确与否,
    Dim thr As Threading.Thread 
    Dim l As System.Security.Principal.WindowsIdentity Function print() 
    thr = New Threading.Thread(AddressOf printAutoCAD) 
    thr.Start() 
    l = System.Security.Principal.WindowsIdentity.GetCurrent 
    End Function Private Sub printAutoCAD() 
    System.Security.Principal.WindowsIdentity.Impersonate(l.Token)
      

  6.   

    to 不能打开,调用新建word的方法时,就抛出异常web程序?如果是的话,参看
    http://community.csdn.net/Expert/topicview.asp?id=4912705