【问题标题】:What determines your USERPROFILE Environment Variable when launching a .NET app启动 .NET 应用程序时,什么决定了您的 USERPROFILE 环境变量
【发布时间】:2012-03-01 03:25:57
【问题描述】:

我有一个 .net/C# 应用程序,在运行 VMWARE / Windows Server 2008 的测试服务器上启动时,接收到指向 C:\windows\system32\config\systemprofile 的 USERPROFILE 环境变量,但其他应用程序似乎内置于类似时尚继承了 C:\Users\{username} 的正确值。

略有不同 - 应用程序在我的开发机器上本地运行时会收到正确的值。所以我认为这是一个配置文件/注册表问题,在我的应用程序中设置了一些组合。

当您尝试打开 OpenFileDialog 或类似内容时,就会出现问题。您会收到异常“位置不可用:C:\Windows\system32\config\systemprofile\Desktop 指的是不可用的位置...”

有什么想法吗?

更新:该应用程序是通过 WCF 针对 IIS 运行 Web 服务的 WPF。在本地开发中,我正在使用 IISExpress。我发现在客户端接触 WCF 服务后,应用程序继承了运行服务的 IIS AppPool 的 APPDATA 和 USERPROFILE。如果我调整 AppPool 值以使用我的用户帐户而不是 ApplicationPoolDefault 并设置 LoadUserProfile = true - 一切正常。显然这是一件坏事。作为替代方案,我在 WPF 应用程序运行时缓存环境变量,并在它最初连接到 WCF 后,我重置变量。这似乎解决了这个问题,但我想以更好的方式解决它,但我不知道是什么影响了 WCF 和我的 IIS 服务中的这种行为。

【问题讨论】:

  • 您是否使用Process.Start 以编程方式启动进程?进程是否从 Windows 服务启动?
  • 感谢您的回复。当我们从桌面上的 exe 启动应用程序时,该值存在。它还使用 Process.Start 管理生成其他进程,以及在子 AppDomain 中托管 dll。但是它们最终都从父级继承了相同的值。我有另一个应用程序也可以启动相同的进程,但该应用程序(如上所示)接收到正确的值,因此,子进程也继承了正确的值。

标签: c# .net windows operating-system registry


【解决方案1】:

它可能必须处理在 IIS 中运行 Web 应用程序的帐户。您可以将其从默认的“网络服务”帐户更改为实际用户帐户。

【讨论】:

  • 哪里说这是一个网络应用?
  • 该应用程序是一个 WPF 前端,使用 WCF 连接到 IISExpress 服务器。
  • 其实更准确一点。在服务器上,它直接部署在 IIS 上,而不是 IISExpress。客户端仍然连接。客户端中有关于 AppPool 的环境变量。不确定这是否意味着以某种方式使用 WCF 并且我们的设置加载了不正确的配置文件。
  • 谢谢你的详细信息,我应该问的。
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2018-10-29
  • 2023-04-07
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多