如何共享远程文件夹

本文关键字:文件夹 共享 何共享 | 更新日期: 2023-09-27 17:59:06

我正在开发。NET类,该类将在用于管理我们的Active Directory帐户的工具中使用。我们的每个帐户都有一个网络主目录,可以位于几个不同的服务器上,这取决于我们使用的帐户类型。

我可以很好地创建和删除文件夹,但我在共享文件夹时遇到了问题。我在这里找到了一些似乎是我想要的代码,但它对我来说不正常。我得到的返回值是2,但我不确定这意味着什么。

这不应该是文件权限问题,因为我以自己的身份运行测试应用程序,并且我可以完全控制我试图共享的文件夹(及其每个父文件夹)。

这是我的(修改后的)代码版本:

char[] delim = { '''' };
// folderPath is a string (UNC path)
string[] drivePath = folderPath.Split(delim); 
// Create a ManagementClass object
ManagementClass managementClass = new ManagementClass("Win32_Share");
// Create ManagementBaseObjects for in and out parameters
ManagementBaseObject inParams = 
    managementClass.GetMethodParameters("Create");
ManagementBaseObject outParams;
// Set the input parameters
inParams["Description"] = "";
inParams["Name"] = drivePath[3];
inParams["Path"] = folderPath;
inParams["Type"] = 0x0; // Disk Drive
// Invoke the method on the ManagementClass object
outParams = managementClass.InvokeMethod("Create", inParams, null);

我试过输出其他outParams,但看起来ReturnValue就是我得到的全部。

有没有其他方法可以更好地共享远程文件夹?

如何共享远程文件夹

我会自己回答,以防其他人稍后发现。

我最终选择了使用PSExec和NET SHARE:这个非常不性感的答案

// Retrieve drive path from AD
char[] delim = { '''' };
string[] drivePath = userAD.HomeDirectory.Split(delim);
// Configure startup properties of process
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.FileName = "C:''Windows''System32''psexec.exe";
// Build arguments for folder on alpha or student
startInfo.Arguments = "''''" + serverName + " -s net share " + shareName + "=" folderPath + "$ /GRANT:'"authenticated users'",full";
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

请注意,在我们的环境中,程序将已经在对共享文件夹具有完全控制权限的用户下运行。为了允许非特权用户进行类似操作,您必须在startInfo.Arguments中指定名称和密码。