Путь UNC можно сопоставить из командной строки, но не из приложения консоли .NET.

Как сделать так, чтобы код .NET сопоставил диск Z: с путем UNC для учетной записи SVNdatamgmt?

Я пытаюсь сопоставить локальный диск с сетевым путем UNC в консольном приложении .NET. Похоже, код работает из командной строки как для служебной учетной записи (№ 2 и № 3), так и для моих учетных данных (№ 4). Но при запуске из консольного приложения с использованием исходного кода .NET учетная запись службы не работает (№ 5), но мои учетные данные работают (№ 6).

Прошлой ночью я заметил, что получил ошибку (# 1). Подождав 30 минут, все заработало. Таким образом, вы можете игнорировать № 1. Я подумал, что упомяну об этом, на случай, если это даст представление о том, что происходит.

Консольное приложение работает от имени администратора на компьютере с Windows Server 2008. И SVCdatamgmt, и macgyver являются администраторами на этом компьютере. Команды также выполняются на этой же машине.

================================================== ======================
1.) Это не сработало прошлой ночью:

C:>net use z: \\uwhc-sas2\SASHIMC /USER:SVCdatamgmt thepassword

System error 1909 has occurred.
The referenced account is currently locked out and may not be logged on to.

================================================== ======================
2.) Подождал 30 минут, после чего заработало (без домена):

C:>net use z: \\uwhc-sas2\SASHIMC /USER:SVCdatamgmt thepassword

The command completed successfully.

================================================== ======================
3.) Это также работает (с доменом):

C:>net use z: \\uwhc-sas2\SASHIMC /USER:UWHIS\SVCdatamgmt thepassword

The command completed successfully.

================================================== ======================
4.) Это также работает с моими учетными данными:

C:>net use z: \\uwhc-sas2\SASHIMC /USER:macgyver thepassword

The command completed successfully.

================================================== ======================
5.) Код .NET, который сопоставляет диск. Учетные данные SVCdatamgmt не работают.

public static void MapNetworkDriveToUNC()
{
    var command = @"net use " + mapDrive + " " + uncPath + " " + uncUser + " " + uncPass;
    ExecuteCommand(command, 10000);
}

public static void UnmapNetworkDriveToUNC()
{
    var command = "net use " + mapDrive + " /delete";
    ExecuteCommand(command, 5000);
}

================================================== ======================
6.) Код .NET, который сопоставляет диск. Мои учетные данные работают (macgyver)

-- тот же код, что и №5 --

================================================== ======================
К вашему сведению: перед выполнением каждой приведенной выше команды я должен отключить (отключить) диск, используя этот код. ..

C:\>net use z: /delete

z: was deleted successfully.

person MacGyver    schedule 08.03.2013    source источник


Ответы (1)


Я искал команду для сопоставления пути UNC к сетевому диску с С#, и я реализовал это и отлично работает. Слишком поздно, но может быть полезно кому-то в будущем:

  public static bool MapDrivetoUNC(string DriveName, string Path)
  {
     try
     {
        bool isMapped = true;

        System.Diagnostics.Process p = new System.Diagnostics.Process();
        p.StartInfo.UseShellExecute = false;
        p.StartInfo.CreateNoWindow = true;
        //p.StartInfo.RedirectStandardError = true;
        //p.StartInfo.RedirectStandardOutput = true;
        p.StartInfo.FileName = "net.exe";
        p.StartInfo.Arguments = " use " + DriveName + ": " + '"' + Path + '"'; 
        p.Start();
        p.WaitForExit();

        //str errMsg = p.StandardError.ReadToEnd();
        // similar for erroutput .. 
        isMapped = true;
     }
     catch(Exception ex)
     { 
         Utility.logError(ex);
         isMapped = false;
     }
     return isMapped;
  }
person user1701450    schedule 11.07.2013
comment
Я реализовал это: net use Z: \\путь\путь\путь /USER:the_user the_password ... и чтобы удалить его, я сделал это: net use Z: /delete - person MacGyver; 09.12.2013