Inno setup Inno安装程序创建具有管理权限的HTA快捷方式

Inno setup Inno安装程序创建具有管理权限的HTA快捷方式,inno-setup,uac,hta,Inno Setup,Uac,Hta,我正在使用Inno安装程序创建一个桌面快捷方式,用于打开保存在Windows 7程序文件中的文件。此HTA文件调用需要以管理员身份运行的外部exe文件 所以,要做到这一点,我想自动创建一个快捷方式,使用Inno安装程序作为管理员运行。这里的问题是快捷方式指向HTA文件而不是exe。我该怎么做呢?这个问题的直接答案是创建mshta.exe的快捷方式,并将HTA的文件名作为其参数。mshta.exe的快捷方式可以标记为以管理员身份运行。如果您的可执行文件需要管理员访问权限,则您不应尝试提升HTML应

我正在使用Inno安装程序创建一个桌面快捷方式,用于打开保存在Windows 7程序文件中的文件。此HTA文件调用需要以管理员身份运行的外部exe文件


所以,要做到这一点,我想自动创建一个快捷方式,使用Inno安装程序作为管理员运行。这里的问题是快捷方式指向HTA文件而不是exe。我该怎么做呢?

这个问题的直接答案是创建mshta.exe的快捷方式,并将HTA的文件名作为其参数。mshta.exe的快捷方式可以标记为以管理员身份运行。

如果您的可执行文件需要管理员访问权限,则您不应尝试提升HTML应用程序。

检查此示例:

<html>
<head>
<title>HTA Helpomatic</title>

<HTA:APPLICATION
     ID="oHTA"
     APPLICATIONNAME="HTAHelpomatic"
     SCROLL="yes"
     SINGLEINSTANCE="yes"
>
<!-- ID="objHTAHelpomatic" -->
<!-- WINDOWSTATE="maximize" -->

</head>

<SCRIPT Language="VBScript">

If HTAElevate() = True Then
    CreateObject("WScript.Shell").Run "mmc.exe compmgmt.msc", , True
    Call Main()
End If

Sub Main()
    MsgBox "HTA-Ende", 4096
End Sub


'*** v13.3 *** www.dieseyer.de *****************************
Function HTAElevate()
'***********************************************************
' http://dieseyer.de/scr/elevate.hta
' Unter Windows x64 laufen VBS' nach einem Doppelklick in der x64-Umgebung
' mit %WinDi%\System32\wscript.exe oder mit %WinDi%\System32\cscript.exe.
' In der x64-Umgebung laufen VBS aber nicht (richtig). Die Prozedur
' HTAElevate() erkennt dies und startet ggf. das VBS in der

  Const Elev = " /elevated"

' MsgBox oHTA.commandLine, , "5016 :: "

' Trace32Log "5018 :: oHTA.commandLine: ==" & oHTA.commandLine & "==", 1

  HTAElevate = True

' If InStr( LCase( oHTA.commandLine ), Elev) > 0 then MsgBox oHTA.commandLine, , "5022 :: "
  If InStr( LCase( oHTA.commandLine ), Elev) > 0 then Exit Function


  On Error Resume Next
    window.resizeto 750, 10 ' : window.moveto screen.width / 2, screen.height / 2
  On Error GoTo 0

' MsgBox oHTA.commandLine, , "5030 :: "

  createobject("Shell.Application").ShellExecute "mshta.exe", oHTA.commandLine & Elev, "", "runas", 1

  HTAElevate = False

  self.close

End Function ' HTAElevate()


</SCRIPT>
<body>


</body>
</html>

HTA助推器
如果HTAElevate()=True,则
CreateObject(“WScript.Shell”)。运行“mmc.exe compmgmt.msc”,True
调用Main()
如果结束
副标题()
MsgBox“HTA Ende”,4096
端接头
'***v13.3***www.dieseyer.de*****************************
函数HTAElevate()
'***********************************************************
' http://dieseyer.de/scr/elevate.hta
“Unter Windows x64 laufen VBS”在x64 Umgebung的双通道中
'mit%WinDi%\System32\wscript.exe或mit%WinDi%\System32\cscript.exe。
“在x64乌姆盖邦-劳芬VBS阿伯尼希特(richtig)。Prozedur模具
他死了,然后开始了。das VBS在der中的应用
常量Elev=“/highted”
'MsgBox oHTA.commandLine,“5016::”
'Trace32Log“5018::oHTA.commandLine:==”&oHTA.commandLine&“==”,1
HTAElevate=True
'如果InStr(LCase(oHTA.commandLine),Elev)>0,那么MsgBox oHTA.commandLine,“5022:”
如果InStr(LCase(oHTA.commandLine),Elev)>0,则退出函数
出错时继续下一步
window.resizeto 750,10':window.moveto screen.width/2,screen.height/2
错误转到0
'MsgBox oHTA.commandLine,“5030:”
createobject(“Shell.Application”).ShellExecute“mshta.exe”、oHTA.commandLine&Elev、“,”runas“,1
HTAElevate=False
自我封闭
结束函数“HTAElevate()

HTA是HTML应用程序。它基本上是一个脚本。我有理由相信,文档的快捷方式(HTA可能会将其视为)不能作为管理员运行。我非常怀疑HTA是否想做任何管理工作——HTA通常只是打包的网页,不是吗?没错。我使用HTA是因为我不需要创建复杂的GUI。HTA通过调用覆盖HTA文件的外部exe来更新自身的内容。这就是为什么我需要管理员的权利。我想我应该把它直接放在C:\some\u文件夹下,这样我就不必再搞砸了。如果你的可执行文件需要管理员访问权限,应该用合适的清单将其标记为这样(侧边栏面板中有太多合适的问题要列出)。这将允许Windows Shell在运行它之前要求用户确认。对于初始的
HTA
快捷方式,不应执行此操作。请注意,“兼容性”选项卡上的“以管理员身份运行此程序”复选框与单击“快捷方式”选项卡上的“高级”按钮时的“以管理员身份运行”复选框不同。关键是,您可以配置一个特定的快捷方式以管理员身份运行,这是HTA需要的(因为将mshta.exe标记为需要提升确实是不合适的)。“…可以标记为以管理员身份运行。”我可以问一下,如何操作?这可能取决于用于创建快捷方式的工具。我不知道Inno安装工具是否具有此功能。另一种方法是,在启动可执行文件时,使用外部脚本(如elevate.js,此处提到:)或elevate32.exe/elevate64.exe()触发UAC提示。“以管理员身份运行”将是可执行文件的属性,而不是快捷方式。将其标记为“以管理员身份运行”会产生副作用,每次尝试使用它时都会提示提升。我不是说“兼容性”选项卡上的“以管理员身份运行此程序”复选框。我指的是当您单击“快捷方式”选项卡上的“高级”按钮时的“以管理员身份运行”复选框。它们是两个独立的选项,具有不同的效果。关键是,此选项可能不会在用于创建快捷方式的工具中公开。这可以通过调用引发UAC提示的脚本或其他可执行文件来解决。@AbqBill注意到。但这并没有改变这样一个事实,即需要管理员访问权限的应用程序应该请求提升。这取决于您是否确实可以更改可执行文件的清单。如果没有,则与需要提升mshta.exe的情况相同。