Открыть документ как другой пользователь - PullRequest
2 голосов
/ 24 июня 2011

Как открыть документ как другой пользователь?

Тип документа неизвестен (может быть pdf, .xls, .doc, изображения и т. Д.). Документ находится на сетевом ресурсе, имя пользователя, домен и пароль известны.

Я тщательно исследовал этот вопрос и не верю, что на этот вопрос здесь дан ответ. Пожалуйста, докажите, что я не прав.

Этот вопрос близко Открыть общий файл под другим пользователем и доменом?

Но, к сожалению, он открывает файл в файловом потоке, мне нужно открыть файл в соответствующем приложении.

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Рассматривали ли вы просто локальное копирование файла и открытие его в качестве текущего пользователя?

Обоснование:

  • Я не знаю ни одного приложения для редактирования документов, которое бы позволяло открывать документы как другой пользователь. В результате вам лучше запустить приложение для просмотра документа от имени другого пользователя.
  • Не все приложения ведут себя должным образом при выполнении на одном рабочем столе * под другим пользователем (т. Е. С «запускать как» или CreateProcessWithLogonW), и большинство приложений, связанных с взаимодействием с документами, не тестируются для использования в контексте «запускать как».
  • Некоторые приложения просто игнорируют тот факт, что они пытались запускаться под другим пользователем, если на том же рабочем столе уже запущена другая копия.

* Рабочий стол используется в смысле Win32.

1 голос
/ 24 июня 2011

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

таким образом вы поместили разрешающий слой / уровень между ними, и вам не нужно разбираться с ним в вашем клиентском приложении.клиентское приложение просто отправляет имя пользователя, а веб-сервис обрабатывает остальное

1 голос
/ 24 июня 2011

Выезд Runas

runas /user:somedomain\someuser "cmd /c start c:\somedocument.pdf"

Он расположен на C:\Windows\System32\runas.exe

Чтобы открыть это из приложения C #, вы можете использовать Process.Start, ссоответствующие флаги.

Редактировать

Ну, вы можете полностью отказаться от использования Runas, так как Process.Start может выполнять ту же работу и при этом разрешать вамчтобы указать пароль, какой вам нравится (внутренне или через жесткий код).

Просто используйте cmd.exe /c start <pathToFile>, чтобы запустить файл через оболочку с соответствующей программой:

string cmdPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.System),
    "cmd.exe");
string workingDirectory = @"C:\users\public";
string pathToFile = Path.Combine(workingDirectory, "somefile.png");
string arguments = string.Format("/c start {0}", pathToFile);
var password = new SecureString();
foreach (char c in "usersPassword")
    password.AppendChar(c);

var processStartInfo = new ProcessStartInfo()
{
    FileName = cmdPath,
    Arguments = arguments,
    WorkingDirectory = workingDirectory,
    UserName = "TestUser",
    Domain = Environment.MachineName, // Could use domain
    Password = password,
    UseShellExecute = false,
};
Process.Start(processStartInfo);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...