Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何共享远程文件夹?_C#_.net_Windows Server - Fatal编程技术网

C# 如何共享远程文件夹?

C# 如何共享远程文件夹?,c#,.net,windows-server,C#,.net,Windows Server,我正在开发一个.NET类,该类将用于管理Active Directory帐户的工具中。我们的每个帐户都有一个网络主目录,可以位于两个不同的服务器上,具体取决于我们使用的帐户类型 我可以创建和删除文件夹,但共享文件夹时遇到了问题。这似乎是我想要的,但对我来说不太合适。我得到的返回值是2,但我不确定这表示什么 这不应该是一个文件权限问题,因为我以自己的身份运行我的测试应用程序,并且我可以完全控制要共享的文件夹(及其每个父文件夹) 以下是我的(修改过的)代码版本: char[] delim = { '

我正在开发一个.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);
我试着输出其他输出参数,但看起来我只得到了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
中指定名称和密码