Win7, SP1, UAC, административные привилегии и повышение прав - проблема! - PullRequest
0 голосов
/ 04 марта 2011

Люди,

Большая проблема, которую я не знаю, как решить. Кажется, что Win7 SP1 сломал мое приложение. Мой сценарий работал!

У меня есть приложение Win C # .NET 4.0 с манифестом, который запрашивает административные привилегии через строку app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

Я также запускаю новый поток в моем приложении с помощью следующих строк кода:

Process certMaker = new Process();
certMaker.StartInfo.FileName = makeCertExe;
certMaker.StartInfo.UseShellExecute = false;
certMaker.StartInfo.RedirectStandardOutput = true;
certMaker.Start();
certMaker.WaitForExit();

Раньше это работало без проблем, но теперь оно больше не работает с повышенными привилегиями. Просто чтобы быть уверенным, я украсил метод:

[PrincipalPermission(SecurityAction.Demand, Role = @"BUILTIN\Administrators")]

, но я получаю только ошибку «Запрос на получение основного разрешения не выполнен».

Любая помощь? Что изменилось в SP1, что могло вызвать это? Наша заявка еще не подписана из-за высоких затрат.

Я пытался отключить или включить UAC на любом уровне, я пытался установить режим совместимости с XP на Win7 и ничего.

Я включил полные аудиторские отчеты для любых сбоев безопасности в ОС. Вот что я думаю, что получаю каждый раз, когда пытаюсь выполнить свою команду:

A handle to an object was requested.

Subject:
    Security ID:        LOCAL SERVICE
    Account Name:       LOCAL SERVICE
    Account Domain:     NT AUTHORITY
    Logon ID:       0x3e5

Object:
    Object Server:      PlugPlayManager
    Object Type:        Security
    Object Name:        PlugPlaySecurityObject
    Handle ID:      0x0

Process Information:
    Process ID:     0x2dc
    Process Name:       C:\Windows\System32\svchost.exe

Access Request Information:
    Transaction ID:     {00000000-0000-0000-0000-000000000000}
    Accesses:       Unknown specific access (bit 1)

    Access Reasons:     -
    Access Mask:        0x2
    Privileges Used for Access Check:   -
    Restricted SID Count:   0

Спасибо!

1 Ответ

0 голосов
/ 04 марта 2011

Почему UseShellExecute=false?Если вы сделаете это true, он будет использовать ваш манифест.Я знаю, вы говорите, что раньше это работало, но по моему опыту вы должны использовать ShellExecute, чтобы учесть ваш манифест.

Это не зависит от подписи, кстати, это просто определяет, получите ли вы страшный оранжевый диалог с вопросительными знаками на нем и Unknown Publisher или чуть менее страшный, который называет вашу фирму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...