我有一个 ASP.NET 应用程序,我正在 Windows 8.1 机器上开发并部署到 Windows Server 2012R2 机器上。这个应用程序通过调用来启动一个命令行可执行文件Diagnostics.Process.Start()。此命令行可执行文件会在首次为相应用户运行时在 HKEY_CURRENT_USER 下的注册表中写入一些默认条目。这些稍后通过调用访问Registry.CurrentUser.OpenSubKey()。
在 8.1 机器上在其各自的 ApplicationPoolIdentity 用户下运行 Web 应用程序时,它运行良好,但在 WS2012 机器上却不行。经过进一步调查,似乎 8.1 正在HKEY_USERS为这些 IIS 虚拟帐户创建条目,而 WS2012 则没有。NetworkService、DefaultAppPool 等在注册表中有条目,但虚拟帐户没有,所以如果我不在 WS2012 框(例如 NetworkService)上的现有用户下运行应用程序池,它就无法写入/读取注册表项,因此它无法提取设置。
为什么是这样?如何允许 Windows Server 2012 为 ApplicationPoolIdentity 用户帐户创建注册表项?