Олицетворение при запуске удаленного запускаемого задания - PullRequest
2 голосов
/ 23 декабря 2008

Приложение My (.NET) позволяет пользователям настраивать значения базы данных. Затем они должны будут генерировать отчеты на основе своих изменений, либо Crystal, либо Reporting Services, но это не важно - важно то, что генерация определенно не сможет произойти в их локальном окне, например у них может не быть Crystal Reports (или чего-либо еще), установленного на их компьютере.

Итак, я настроил очередь сообщений на сетевом компьютере (который может генерировать отчеты), и мое приложение будет публиковать в этой очереди сообщение, отправляющее объект вместе со всей необходимой информацией. Все идет нормально.

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

Проблема в том, что, хотя все работает нормально, запущенное консольное приложение работает как учетная запись локального компьютера. Приложение должно взаимодействовать с базой данных (которая использует встроенную аутентификацию).

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

Вопрос в том, можно ли настроить правило, триггер или консольное приложение для запуска от имени определенного пользователя? Я перепробовал все параметры конфигурации, которые я могу видеть, но безрезультатно.

Может быть, я могу выдать себя за пользователя в самом коде приложения (в app.config)? Это возможно в ASP.NET коде, но не в коде WinForms.

Редактировать: Предложение подражания работает хорошо ... вплоть до того момента, когда я получаю ошибку "Доступ запрещен" из функции Process.Start (), вызывающей startwithcreateprocess ().

Пользователь, которого я олицетворяю, имеет разрешение на запуск процесса на локальном компьютере (поэтому он может работать без проблем).

Ответы [ 2 ]

2 голосов
/ 23 декабря 2008
    Process p = new Process();

    p.StartInfo.UseShellExecute = false;

    SecureString password = new SecureString();
    string pwd = "mysecret123";
    foreach (char c in pwd)
    {
        password.AppendChar(c);
    }

    p.StartInfo.Domain = "DomainHere";
    p.StartInfo.UserName = "Natthawut";
    p.StartInfo.Password = password;

    p.StartInfo.FileName = "cmd";
    p.StartInfo.Arguments = "/c dir";
    p.Start();

См. Блог по безопасности .NET - http://blogs.msdn.com/shawnfa/archive/2004/06/02/146915.aspx

Кстати, я думаю, это не имеет ничего общего с MSMQ:)

РЕДАКТИРОВАТЬ: Может быть, я что-то упустил. Не уверен в том, как MSMQ провоцирует новый процесс, или для запуска консольного приложения используется только ваше приложение.

0 голосов
/ 23 декабря 2008

Пробовал использовать олицетворение в приложении?

Более грубо вы можете запустить ваше приложение.

...