C#在不同的凭证下运行一段代码

Posted

技术标签:

【中文标题】C#在不同的凭证下运行一段代码【英文标题】:C# run piece of code under different credential 【发布时间】:2013-06-14 14:25:18 【问题描述】:

参考THIS QUESTION 我能够以不同的用户身份执行一些代码。 现在,我试图以具有管理员权限的用户身份执行一段代码,但我收到了丢失文件的错误。代码是这样的:

using (new Impersonator("domainAdmin", "DOMAIN", "myStup1dPa$$w0rd"))

    GetXAApplicationByName apps = new GetXAApplicationByName();
    apps.BrowserName = new string[]  "*" ;
    IEnumerable<XAApplication> result = CitrixRunspaceFactory.DefaultRunspace.ExecuteCommand(apps);
    // other code...

错误在最后报告的行抛出,以IEnumerable&lt;XAApplication&gt;开头的行是:

FileNotFoundException 未处理 C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll

我不报告Impersonator 类的代码,基本架构是在链接问题上报告的(它也适用于其他应用程序)。

我错过了什么吗?

【问题讨论】:

这个链接有帮助吗:***.com/questions/6783213/…? 问题好像类似,但是我冒充的用户已经是本地管理员了 是否安装了 Windows Powershell? 是的(版本 2) 堆栈跟踪是什么? 【参考方案1】:

看起来模拟没有问题,但是您的代码以某种方式尝试加载不在 GAC 中的程序集 System.Management.Automation.dll,您可以尝试在 GAC 中注册此程序集并再次尝试。

【讨论】:

它已经在 GAC 中注册,并且在不模拟的情况下运行它确实有效 您是否可以使用 exception.ToString() 捕获异常并查看完整的错误消息(包括内部异常)并查看您是否能够获取任何信息

以上是关于C#在不同的凭证下运行一段代码的主要内容,如果未能解决你的问题,请参考以下文章

C#编写的WinForm程序,运行一段时间后越来越卡,怎么办?

如何在 C# 中并行运行两个线程 [关闭]

C#计算一段程序运行时间的三种方法

在C#中Debug和Release两种调试方法出来结果不同,求问为啥?

c# thread 一段时间后占满CPU

停止 FileSystemWatcher 后运行另一段代码