2015-09-19 4 views
0

Я пытаюсь открыть локальную папку на своем компьютере. Код показан ниже, взятый из Интернета и появляющийся во многих местах, но не работающий. Я что-то упустил?share folder C# - not work

private void button1_Click(object sender, EventArgs e) 
    { 
     // 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"] = "My Files Share"; 
     inParams["Name"] = "My Files Share"; 
     inParams["Path"] = @"C:\folder"; 
     inParams["Type"] = 0x0; // Disk Drive 
           // Invoke the method on the ManagementClass object 
     outParams = managementClass.InvokeMethod("Create", inParams, 
     null); 
     //Check to see if the method invocation was successful 
     if ((uint)(outParams.Properties["ReturnValue"].Value) != 0) 
     { 
      throw new Exception("Unable to share directory."); 
     } 
    } 
+0

Что такое возвращаемое значение? –

+0

Необработанное исключение типа «System.Exception» произошло в sharefolder.exe Дополнительная информация: Не удалось обмениваться каталогом. –

+0

Я ищу простой код, который работает. только локальная папка, чтобы поделиться ею. не могу понять, почему так сложно делать –

ответ

0

Прежде всего, проблема заключалась в разрешении. Я попытался сделать чистую долю через CMD, и она также не сработала, только когда я запускал CMD, когда работа с общим доступом администратора работала.

То же самое в C#, Visual Studio, вы ДОЛЖНЫ запускаться как администратор, тогда это работает. Вот мой код:

try 
     { 
      ManagementClass managementClass = new ManagementClass("Win32_Share"); 
      ManagementBaseObject inParams = managementClass.GetMethodParameters("Create"); 
      inParams["Description"] = Description; 
      inParams["Name"] = ShareName; 
      inParams["Path"] = folderPath; 
      inParams["Type"] = 0; //Disk Drive 
      inParams["MaximumAllowed"] = null; 
      inParams["Password"] = null; 
      inParams["Access"] = null; 

      ManagementBaseObject outParams; 
      outParams = managementClass.InvokeMethod("Create", inParams, null); 

      if ((uint)(outParams.Properties["ReturnValue"].Value) != 0) 
       throw new Exception(); 
      ManagementObject share = new ManagementObject(managementClass.Path + ".Name='" + ShareName + "'"); 
     } 

     catch 
     { 
      MessageBox.Show("You must run the program as administrator", "N.U.C", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      Environment.Exit(1); 

     } 
+0

Я бы пошел еще дальше: я бы выяснил, запускаете ли вы процесс как администратор, а если нет, снова запустите процесс с помощью 'startInfo.Verb = "runas"; '. – rbm

0

Код в порядке. Если вы хотите отладить программу с помощью IDE, это довольно просто, если вы используете Visual Studio в качестве IDE, просто запустите VS с правами администратора и откройте свой проект.