C# OLEDB-соединение, возможно ли получить windows имя пользователя в каталоге источника данных? - PullRequest
0 голосов
/ 24 января 2020

Можно ли использовать windows имя пользователя в источнике данных соединения OleDB? Я хочу поместить файл Excel в папку «Документы» и извлечь из нее информацию, но не хочу там жестко кодировать имя пользователя. Есть ли способ получить это имя?

Я использую форму Windows.

con = new OleDBConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\[username]\Documents\Test.xlsx; Extended properties=Excel 12.0;"

1 Ответ

0 голосов
/ 24 января 2020

Существует множество способов получить имя пользователя. Если вам нужен зарегистрированный пользователь, вы можете использовать Environment.Username. Если вам нужен список всех пользователей в текущем домене, вы можете использовать следующий метод

public List<string> GetDomainUsers() 

var usersInCurrentDomain = new List<string>(); 

SelectQuery sQuery = new SelectQuery("Win32_UserAccount", $"Domain ='{Environment.UserDomainName}'");

ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(sQuery);

foreach (ManagementObject mObject in mSearcher.Get())
{
    product.Add(mObject["Name"]);
}
    return product;
}

Если вы пытаетесь получить доступ к папке с документами других пользователей, вам нужно либо уменьшить ограничения на это. папка или действие с административными полномочиями.

В качестве альтернативы, если эта информация не является уникальной для каждого пользователя, вы можете sh поместить эту информацию в более нейтральную папку, например C: \ ProgramData \ MyApp или возможно, в одной из папок c. Это было бы намного проще.

...