mkdir в командном файле от имени администратора

Я пытаюсь написать пакетный файл, который создает новый каталог в %programfiles%. Его нужно запускать от имени администратора. Я пробовал:

runas /user:admin-pc\admin "mkdir C:\Program Files\MyDir"
runas /user:admin-pc\admin "mkdir \"C:\Program Files\MyDir\""
runas /user:admin-pc\admin "cmd /c mkdir \"C:\Program Files\MyDir\""
runas /user:admin-pc\admin "cmd /c mkdir %programfiles%\MyDir"
runas /user:admin-pc\admin "cmd /c mkdir \"C:/Program Files/MyDir\""
runas /user:admin-pc\admin "cmd /c mkdir C:\Program^ Files\MyDir"

Как правильно это сделать?


person Levi Barnes    schedule 19.12.2017    source источник
comment
Не используйте команду runas — сначала поднимите командную оболочку, а затем создайте каталоги. Что вы действительно пытаетесь сделать?   -  person Bill_Stewart    schedule 20.12.2017
comment
Это сценарий установки для установщика IExpress. Таким образом, пользователь не может нажать «Запуск от имени администратора».   -  person Levi Barnes    schedule 20.12.2017
comment
Ваш установщик должен запросить повышение прав. Вы не можете обойти это. Это не вопрос для stackoverflow.   -  person Bill_Stewart    schedule 20.12.2017
comment
IExpress, предустановленный в Win7, не запрашивает повышение прав во время установки. Вы хотите сказать, что руны бесполезны?   -  person Levi Barnes    schedule 20.12.2017
comment
RunAs не может повысить права, но может изменить пользователя только как неадминистратора.   -  person ACatInLove    schedule 20.12.2017
comment
Имейте в виду, что runas не дает возможности запускать приложение с маркером доступа с повышенными правами, независимо от того, является ли он обычным пользователем с такими привилегиями, как оператор резервного копирования или администратор. Команда runas предоставляет пользователю возможность запускать приложение с другими учетными данными. ... Если ваша программа программно использует команду runas, убедитесь, что она не предназначена для запуска процесса с повышенными привилегиями. msdn.microsoft.com/en-us/library/bb530410.aspx   -  person ACatInLove    schedule 20.12.2017
comment
Вы можете создать свой установщик IExpress и использовать ResHacker, чтобы заменить его манифест на тот, что в моем ответе. angusj.com/resourcehacker Тип ресурса 24.   -  person ACatInLove    schedule 20.12.2017
comment
Вот это да. Я бы никогда не поверил. Работал как шарм! Открыл его в ResHacker, изменил RequestedExecutionLevel в манифесте на level=requireAdministrator в ResHacker и сохранил. Ноль дефектов. Спасибо!   -  person Levi Barnes    schedule 20.12.2017


Ответы (1)


Вопрос оказался специфичным для IExpress.

Вы можете создать свой установщик IExpress и использовать ResHacker, чтобы заменить его манифест на тот, что в моем ответе. http://angusj.com/resourcehacker Тип ресурса 24.

Вот это да. Я бы никогда не поверил. Работал как шарм! Открыл его в ResHacker, изменил RequestedExecutionLevel в манифесте на level= "requireAdministrator" в ResHacker и сохранил. Ноль дефектов. Спасибо

Этот ответ относится к консольным программам - см. admin во время сборки Maven для более общего способа.

Для повышения уровня в Windows рекомендуется встроить манифест. Чего нельзя сделать для текстовых программ. Легко поместить vbscript в VB.NET, добавить манифест и скомпилировать его.

Текущие подходы к сценариям имитируют щелчок правой кнопкой мыши, а затем «Запуск от имени администратора». Это работает только в том случае, если ассоциации файлов установлены по умолчанию в Windows, например, пользователь может отключить этот подход, настроив свою систему.

Имейте в виду, что runas не дает возможности запускать приложение с маркером доступа с повышенными правами, независимо от того, является ли он обычным пользователем с такими привилегиями, как оператор резервного копирования или администратор. Команда runas предоставляет пользователю возможность запускать приложение с другими учетными данными. ... Если ваша программа программно использует команду runas, убедитесь, что она не предназначена для запуска процесса с повышенными привилегиями. https://msdn.microsoft.com/en-us/library/bb530410.aspx

Использовать

 RunAsAdminConsole <CMD Command Line>

EG

 RunAsAdminConsole mkdir "C:\Program Files\MyDir"

Файлы. Поместите каждый файл на рабочий стол. Должен быть ANSI. Измените эту строку с /k на /c по своему усмотрению Shell("cmd /k " & Command())

RunAsAdminConsole.vb

imports System.Runtime.InteropServices 
Public Module MyApplication  
    Public Sub Main ()
        Dim wshshell as object
        WshShell = CreateObject("WScript.Shell")
        Shell("cmd /k " & Command())
    End Sub 
End Module 

Запуск от имени администратора.Манифест

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="Color Management"
    type="win32"
/>
<description>RunAsAdminConsole</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
<security> 
    <requestedPrivileges> 
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> 
    </requestedPrivileges> 
</security> 
</trustInfo> 

</assembly>

И пакетный файл RunAsAdminConsole.bat для компиляции выше

C:\Windows\Microsoft.NET\Framework\v4.0.30319\vbc "%userprofile%\Desktop\RunAsAdminconsole.vb" /win32manifest:"%userprofile%\Desktop\RunAsAdmin.manifest" /out:"%userprofile%\Desktop\RunAsAdminConsole.exe" /target:exe

На рабочем столе появится файл с именем RunAsAdminConsole.exe.

person ACatInLove    schedule 19.12.2017