有很多方法可以做到这一点,而不是一个正确的方法。一种方法是将您想要模拟的方法作为委托传递给某种ImpersonatedContext类,它将在您的模拟范围中包装调用。这也将使所有逻辑远离按钮单击事件处理程序,这在结构上也不是最佳方式。
关于您关于安全性的问题,那么截至目前您正在直接指定用户名和密码。如果Eve要反编译你的代码,她就能看到密码。也许你应该让用户指定管理员密码?
我一直在使用示例代码,它对我来说很好。我认为LOGON32_LOGON_NEW_CREDENTIALS没问题。您可以阅读有关不同模式的更多信息 这里(LogonUser)
的 更新 强> 我想快速看看它会是什么样子,就像这样。您传递的委托接受一个对象,并返回一个成功值作为布尔值。您可以修改它以满足您的需求。
public class ImpersonationContext { public delegate bool ImpersonationDel(object obj); public bool Invoke(ImpersonationDel del){ using (new Impersonation("LocalHost", "test", "test")){ return del.Invoke(); } } }