У меня есть приложение с манифестом, которое требует запуска от имени администратора, но частью приложения является сопоставление диска с использованием WNetAddConnection2, которое, по моему мнению, требует его запуска в обычном пользовательском контексте из-за учетных данных и т. Д. выполнить этот фрагмент кода в обычном пользовательском контексте, не создавая отдельный процесс.
EDIT
Из комментариев я получил это далеко, но это не работает. Я ожидал, что это не так, поскольку я не совсем понимаю, как я должен это использовать. Возможно, будет лучше, если я открою новый вопрос?
class Program
{
[DllImport("advapi32.DLL")]
public static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
[DllImport("advapi32.DLL")]
public static extern bool RevertToSelf();
static void Main(string[] args)
{
IntPtr phToken = IntPtr.Zero;
ImpersonateLoggedOnUser(phToken);
MapDrives();
RevertToSelf();
}
}
EDIT
Если текущий пользователь имеет права администратора, то основной процесс повышается с помощью манифеста, в коде с повышенными правами я хочу выполнить команду в пространстве без повышенных прав пользователя, так как это, похоже, имеет разные переменные среды и т. Д. I поверьте, если поток запущен, он не может изменить себя, ему нужно запустить новый.