【发布时间】:2020-03-12 22:31:17
【问题描述】:
我正在创建一个访问文件夹路径的服务:
string localAppDataFolderPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
很遗憾,返回的文件夹不是:
C:\Users\mainuser\AppData\Local
...但是:
C:\Windows\system32\config\systemprofile\AppData\Local
...相反。
mainuser 是当前登录的用户。服务是否可以启动放置在当前用户AppData\Local 中的程序?我知道您可以转到Services-> Right click Properties-> Log on 并输入密码和帐户名,但我正在寻找一种编程解决方案,最好使用sc create command。
或者,我可以将所有感兴趣的文件夹移动到 C:\ProgramData 并完全避开当前用户。有没有办法将文件保存在用户AppData\Local 中并使用无密码的编程解决方案?
【问题讨论】:
-
您的 Windows 服务可能能够通过在
ProcessStartInfo中指定Username/Password来启动在不同帐户中运行的子进程 -
对于 Windows 服务,没有“当前用户”的概念。当您的 Windows 服务正在运行时,可能有多个用户登录到系统 (RDP),或者根本没有登录。您的服务是否假定存在登录用户?
-
@OguzOzgul 是的,它应该只在特定用户登录时运行。
-
@MickyD 我不知道用户名/密码。我依靠windoes来找到正确的用户。
-
拥有一个 Windows 服务来执行包含在其安装程序中的可执行文件(因此知道在哪里可以找到)可能是一个更好的设计。您不应该尝试访问任何可能受操作系统限制的用户(私有)AppData 文件夹。