【问题标题】:Environment.GetFolderPath returns null in WMI providerEnvironment.GetFolderPath 在 WMI 提供程序中返回 null
【发布时间】:2011-02-17 22:53:55
【问题描述】:

我有一个解耦的 WMI 提供程序(Windows 服务),它配置了一个位于 C:\ProgramData\CompanyName 文件夹中的文件。当服务加载时,它使用Environment.GetFolderPath(Enviornment.SpecialFolder.CommonApplicationData) 方法来获取路径的C:\ProgramData 部分。

当服务运行时,我尝试写入同一个文件,通过对服务的 WMI 调用,使用相同的方法调用,但这次失败;返回空值。

我现在在 WMI 的上下文中运行是否会导致这种情况发生?

【问题讨论】:

  • 是的,请注意用户帐户。对于 LocalSystem,GetFolderPath 变得很糟糕。
  • 调用 WMI 的用户帐户?因为两次调用的服务用户相同。
  • @Hans:你到底是什么意思?用Environment.GetFolderPath()不好吗? Environment.GetFolderPath(Environment.SpecialFolder.StartMenu)(当前用户路径)呢
  • 不适用于系统帐户,LocalSystem 没有开始菜单。

标签: c# .net wmi


【解决方案1】:

我也遇到了同样的问题,但也许我可以提供一个解决方案。 尝试在 Web 服务器上获取特殊文件夹以写入临时文件的用法略有不同,但确实与运行它的用户存在问题(在 DefualtAppPool 域组而不是用户下运行)

即使在我的本地 win 7 机器上也返回空白以尝试获取

 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);

但是我确实设法使用 AppDomain.CurrentDomain.GetData 获得我想要的东西的方法,它有几个不同的选项可以在文件结构中查找不同的文件夹,但它不是基于用户,而是基于应用程序或我想是系统工作。 我很确定它与 Environment.GetFolderPath 方法一样“干净”

http://msdn.microsoft.com/en-us/library/system.appdomain.getdata.aspx

其中一个枚举一定会实现您正在寻找的。​​p>

AppDomain.CurrentDomain.GetData("ProgramFiles");

或@JohnB

AppDomain.CurrentDomain.GetData("StartMenu");

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2015-03-23
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2013-11-15
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多