C# 模拟其他用户时出现奇怪错误

C# 模拟其他用户时出现奇怪错误,c#,.net,wpf,impersonation,C#,.net,Wpf,Impersonation,这是之后的下一步 我成功地创建了模拟,但我遇到了一些非常奇怪的错误 让我解释一下情况: 我的应用程序是WPF 我有两个用户,我的本地帐户(localUser)和服务帐户(saUser) 我正在使用Frame.Navigate()函数在我的框架中显示不同的模块 我使用localuser打开应用程序,然后模拟saUser 当我使用localUser运行我的应用程序时,它工作正常(有本地管理员权限,没有本地管理员权限) 当我用saUser运行我的应用程序时,我得到了这个错误,不管saUser是否

这是之后的下一步

我成功地创建了模拟,但我遇到了一些非常奇怪的错误

让我解释一下情况:

  • 我的应用程序是WPF
  • 我有两个用户,我的本地帐户(localUser)和服务帐户(saUser
  • 我正在使用Frame.Navigate()函数在我的框架中显示不同的模块
  • 我使用localuser打开应用程序,然后模拟saUser
当我使用localUser运行我的应用程序时,它工作正常(有本地管理员权限,没有本地管理员权限) 当我用saUser运行我的应用程序时,我得到了这个错误,不管saUser是否是本地管理员,最有趣的是,当第二次调用Navigate(…)时,我得到了错误,第一次正常工作时…:)

帮帮忙,有什么建议吗?我不知道发生了什么。。。 如果我不够清楚,问我

编辑: 我正在添加一些代码,如Ask,只是在发生错误时的一小部分:

I have public static class for navigation
MainWindow mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
current <- currentlly selected module
mainFrame <- frame that is showing all pages

// if current module if already selected refresh frame content
if (current.Link == mainWin.mainFrame.NavigationService.CurrentSource.ToString()) mainWin.mainFrame.Refresh();
// else show page content in frame
else mainWin.mainFrame.NavigationService.Navigate(new Uri(current.acLink, UriKind.Relative));
我有用于导航的公共静态类
MainWindow mainWin=Application.Current.Windows.Cast().FirstOrDefault(窗口=>窗口是MainWindow)作为MainWindow;

当前我面临着同样的问题。有什么解决办法吗? 但是,它适用于我们拥有的代码&不适用于WPF,因为它的代码属于Microsoft

[编辑]
我的观察是,如果WPF用户控件/窗口是在模拟之前初始化的,那么在模拟之后,它们的创建次数就没有问题了;不会抛出任何错误。这可以作为一种解决方法吗?

您能发布一些代码吗?该错误通常在使用windows注册表时发生……为什么要模拟系统用户来运行GUI?看起来该帐户没有读取注册表的一些基本权限(可能是正确的)。您应该使用系统帐户进行一些后台工作、系统服务等,并且只有在您确实需要时才使用。yes error表明我在访问注册表时出错,但这两个帐户都是本地管理员,因此他们可以完全访问注册表,甚至更多,我的本地用户即使不是本地管理员也能正常工作..Grzenio你是对的,我将仅在需要时更改代码以模拟服务帐户。。。我的应用程序通过Click Once分发给我们公司的用户,我们有服务帐户,这样用户不必在任何地方都拥有巨大的权限,但他们以服务帐户(db、网络驱动器等)的名义工作,我想在开始时模拟acc并用它运行整个应用程序,但我发现我会有问题。。。
I have public static class for navigation
MainWindow mainWin = Application.Current.Windows.Cast<Window>().FirstOrDefault(window => window is MainWindow) as MainWindow;
current <- currentlly selected module
mainFrame <- frame that is showing all pages

// if current module if already selected refresh frame content
if (current.Link == mainWin.mainFrame.NavigationService.CurrentSource.ToString()) mainWin.mainFrame.Refresh();
// else show page content in frame
else mainWin.mainFrame.NavigationService.Navigate(new Uri(current.acLink, UriKind.Relative));