代码之家  ›  专栏  ›  技术社区  ›  jestro

C#WMI在远程PC上运行一个exe,然后在同一台PC上运行另一个exe,然后在网络路径上调用Directory.CreateDirectory,但失败

  •  6
  • jestro  · 技术社区  · 14 年前

    使用C#WMI,我在另一台计算机上启动一个exe,此exe使用C启动另一个exe# Process 上课。最后一个exe尝试调用 Directory.CreateDirectory 使用网络路径(aka \\\\comp1\d$\dir\ ) 目录.CreateDirectory 引发此异常:

    Access to the path '\\\\blah\blah\blah' is denied.   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
       at System.IO.Directory.InternalCreateDirectory(String fullPath, String path, DirectorySecurity dirSecurity)
       at System.IO.Directory.CreateDirectory(String path, DirectorySecurity directorySecurity)
    

    如果我直接在计算机上的控制台上运行第三EXE,这个异常就不会被抛出,所有的工作都很好。

    正在创建目录的文件夹的安全设置具有“Everyone”的完全权限。

    我该如何解决这个问题?

    3 回复  |  直到 8 年前
        1
  •  2
  •   Nick    14 年前

    还要注意,通过WMI启动应用程序时,有第三层权限。例如,如果在现有的WMI对象上调用方法,它可能不委托调用方权限,甚至委托宿主EXE的权限,但将具有空的主体。这可能发生在你身上。

    转到“计算机管理”,在“服务和应用程序”下,右键单击WMI控制节点并选择“属性”。转到“安全性”选项卡,然后导航到正确的WMI命名空间(很可能是root\CIMV2),并确保正在使用的用户在该命名空间中也具有相应的权限。

        2
  •  1
  •   ChrisLively    14 年前

    正如亚伦所说,windows共享安全有两个组件,第一个是共享本身的安全。其次是该共享中文件和文件夹的安全性。

    两者都必须允许create目录访问才能正常工作。

    您还应该知道EVERYONE组包括域计算机帐户、内置系统帐户、域用户、来宾和经过身份验证的用户。

    这意味着您要做的第一件事是查看实际运行的用户。如果它是在计算机帐户下运行的,并且不是域的一部分,则您需要授予该计算机帐户访问共享和文件系统的权限。

        3
  •  0
  •   Aaron    14 年前