【发布时间】: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