运行mpi时系统的%appdata%而不是用户的%appdata%生成的文件

问题描述 投票:0回答:3

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

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

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

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

windows mpi appdata
3个回答
1
投票

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

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

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


1
投票

可能的解释是在LOCALSYSTEM帐户下运行的服务正在保存文件。对应用程序的体系结构知之甚少,我不能详细说明它是如何产生的。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.