0

我正在尝试编写一个批处理文件,在%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"

这样做的正确方法是什么?

4

1 回答 1

4

这个问题原来是 IExpress 特定的。

您可以制作您的 IExpress 安装程序并使用 ResHacker 将其清单替换为我的答案中的清单。http://angusj.com/resourcehacker这是资源类型 24。

哇。我永远不会相信它。像魅力一样工作!在 ResHacker 中打开它,将清单中的 RequestedExecutionLevel 更改为 ResHacker 中的 level="requireAdministrator" 并保存。零缺陷。谢谢

这个答案是特定于控制台程序的 - 请参阅在 Maven 构建期间以管理员身份运行批处理脚本以获得更通用的方式。

要在 Windows 中升级,推荐的方法是嵌入清单。对于基于文本的程序,这是无法做到的。将 vbscript 放入 VB.NET、添加清单并编译它很容易。

当前的脚本方法模仿右键单击,然后以管理员身份运行。这仅在文件关联是 Windows 的默认设置时才有效,例如,用户可以通过自定义他们的系统来停止这种方法的工作。

请注意,runas 不提供使用提升的访问令牌启动应用程序的能力,无论它是具有备份操作员或管理员等特权的标准用户。runas 命令授予用户使用不同凭据启动应用程序的能力。...如果您的程序以编程方式使用 runas 命令,请确保它不打算启动提升的进程。 https://msdn.microsoft.com/en-us/library/bb530410.aspx

使用

 RunAsAdminConsole <CMD Command Line>

例如

 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 

RunAsAdmin.Manifest

<?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的文件将出现在桌面上。

于 2017-12-19T22:20:11.140 回答