0

我正在 Windows 上运行我的应用程序 (sample.exe),它使用外部 DLL(即我没有此 DLL 的源代码)。外部 DLL 在%appdata%文件夹中生成一些数据。当应用程序独立运行时,一切都运行良好。

现在,当我使用 MPI 运行 sample.exe 时,正在生成日志"C:\Windows\System32\config\systemprofile\AppData"

我知道这是%appdata%for SYSTEM。此外,MPI 使用"smpd"服务运行,需要以管理员身份安装。所以,我认为 sample.exe 可能归系统所有,而不是用户所有。但是,当从任务管理器中检查时,应用程序的所有者仍然是用户(%username%)。

我不明白为什么日志是在系统的appdata文件夹而不是用户的appdata文件夹中生成的。

4

3 回答 3

1

可能的解释是在 LOCALSYSTEM 帐户下运行的服务正在保存文件。对您的应用程序的架构知之甚少,我无法详细说明这是如何发生的。

于 2013-01-18T11:42:25.427 回答
1

由于sample.exe是您自己的应用程序,您可以通过添加日志记录代码来解决问题。例如:

  • 调用 SHGetKnownFolderPath 来确定应用程序数据文件夹。
  • 调用 GetUserName 以检查您在哪个用户帐户下运行。
  • 调用 GetEnvironmentStrings 以确定如何设置环境变量,特别注意 %APPDATA% 和 %LOCALAPPDATA%。
  • 如果这是一个 C 程序,请同时使用 getenv("APPDATA") 和 getenv("LOCALAPPDATA");IIRC,C 运行时库保留它自己的环境变量副本。

如果应用程序数据文件夹正确但环境变量不正确(这是我对问题的第一个猜测),那么您可以尝试使用 SetEnvironmentVariable 和/或 _putenv 在加载外部库之前更正路径。

于 2013-01-20T20:46:20.910 回答
0

这是因为您的 Windows 服务使用“本地系统帐户”运行。转到您的服务的属性和“登录”选项卡。从本地系统帐户更改为“此帐户”并提供您的凭据。不,该服务应该在用户帐户中运行并且应该使用用户 AppData。

于 2019-04-26T18:40:48.563 回答