使用C#WMI我在另一台计算机上启动一个exe,这个exe使用C#Process
类启动另一个exe。最后一个exe尝试使用网络路径(aka Directory.CreateDirectory
)调用\\\\comp1\d$\dir\
。 Directory.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”提供了完全权限。
如何解决此问题?
答案 0 :(得分:2)
还要注意,当通过WMI启动应用程序时,存在第三层权限。例如,如果您在现有WMI对象上调用方法,则它可能不会委托调用方权限,甚至委托主机exe的权限,但会有一个空主体。这可能发生在你身上。
转到“计算机管理”,在“服务和应用程序”下,右键单击“WMI控制”节点,然后选择“属性”。转到“安全”选项卡,然后导航到正确的WMI命名空间(很可能是root \ CIMV2),并确保您使用的用户也具有相应的权限。
答案 1 :(得分:1)
正如Aaron所说,Windows共享安全性有两个组成部分首先是Share本身的安全性。第二个是该共享中文件和文件夹的安全性。
两者都必须允许创建目录访问才能使其正常工作。
您还应该知道EVERYONE组包括域计算机帐户,内置系统帐户,域用户,来宾和经过身份验证的用户。
这意味着您要做的第一件事就是查看实际运行的用户。如果它在计算机帐户下运行并且它不是域的一部分,那么您将需要授予该计算机帐户访问共享和文件系统的权限。
答案 2 :(得分:0)