【问题标题】:How to share and unshare windows folder using c#如何使用 C# 共享和取消共享 windows 文件夹
【发布时间】:2015-03-16 15:25:25
【问题描述】:

我必须与用户共享一个文件夹并使用 c# 以编程方式取消共享它。 我可以使用 Win32_Share 类的 InvokeMethod 共享文件夹。

            int IsShared = 0;
            ManagementClass mc = new ManagementClass("Win32_Share");

            object[] methodargs = { folderPath, shareName, "0" };

            object result = mc.InvokeMethod("Create", methodargs);


            if ((uint)result != 0)
            {
                IsShared = 1;
                return IsShared;
            }
            else
                return IsShared;

但是如何为特定用户做呢?

另外请告诉我如何取消分享? Win32_Share 类有 delete() 方法。但我无法使用它取消共享。

【问题讨论】:

    标签: c# windows share


    【解决方案1】:

    也许不是最好的方法,但我最终默默地调用了一个命令行,它对我有用:

    分享:

            var folderName = "your_shared_folder_name";
            var targetDir = "your_folders_target_path";
            var process = new Process();
    
            process.StartInfo = new ProcessStartInfo()
            {
                UseShellExecute = false,
                RedirectStandardError = true,
                RedirectStandardInput = true,
                RedirectStandardOutput = true,
                CreateNoWindow = true,
                ErrorDialog = false,
                WindowStyle = ProcessWindowStyle.Hidden,
                FileName = "cmd.exe",
                Arguments = $"/C net share {folderName}=\"{targetDir}\" /Grant:Everyone,READ"
            };
    
            process.Start();
            process.WaitForExit();
    

    注意/Grant:Everyone,READ。这是我想要的,但你可能想稍微摆弄一下这部分。

    删除:

        var folderName = "your_shared_folder_name";
        var process = new Process();
        process.StartInfo = new ProcessStartInfo()
        {
            UseShellExecute = false,
            RedirectStandardError = true,
            RedirectStandardInput = true,
            RedirectStandardOutput = true,
            CreateNoWindow = true,
            ErrorDialog = false,
            WindowStyle = ProcessWindowStyle.Hidden,
            FileName = "cmd.exe",
            Arguments = $"/C net share \"{folderName}\" /delete"
        };
    
        process.Start();
        process.WaitForExit();
    

    【讨论】:

      【解决方案2】:

      检查以下内容

       private void shareDir(string p)
          {
              string shareName = "testshare";
              string shareDesc = "This is a test share kekelar2000";
              string path = p;
      
              SHARE_INFO_502 info = new SHARE_INFO_502();
              info.shi502_netname = shareName;
              info.shi502_type = SHARE_TYPE.STYPE_DISKTREE;
              info.shi502_remark = shareDesc;
              info.shi502_permissions = 0;    // ignored for user-level security
              info.shi502_max_uses = 1;
              info.shi502_current_uses = 1;
              info.shi502_path = path;
              info.shi502_passwd = null;        // ignored for user-level security
              info.shi502_reserved = 0;
              info.shi502_security_descriptor = IntPtr.Zero;
      
              uint error = 0;
              uint result = NetShareAdd(Dns.GetHostName(), 502, ref info, out error);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2019-02-24
        • 2011-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多