2013-03-09 193 views
0

我使用Inno Setup的创建桌面快捷方式管理权限的HTA打开一个HTA文件保存在Program Files文件在Windows 7这个HTA文件调用需要运行外部exe文件作为管理员。Inno Setup的创建快捷方式与

所以,要做到这一点,我想自动创建一个运行为使用Inno Setup的管理快捷方式。这里的问题是,快捷方式指向HTA文件而不是exe。我该如何去做呢?

+0

什么是_HTA_? – jachguate 2013-03-10 01:52:31

+0

HTA是HTML应用程序。它基本上是一个脚本。 http://en.wikipedia.org/wiki/HTML_Application – CookieMonster 2013-03-10 08:12:26

+2

我相当确定文档的快捷方式(这是HTA可能包含的内容)无法以管理员身份运行。对于想要做任何管理的HTA,我会非常怀疑 - HTA通常只是打包的网页,不是吗? – Miral 2013-03-10 13:26:05

回答

-1

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

+0

*“...可以标记为以管理员身份运行。”*我可以问你,怎么样? – TLama 2013-03-11 12:15:26

+0

这可能取决于用于创建快捷方式的工具。我不知道Inno Setup工具是否具有此功能。另一种方法是使用外部脚本(例如elevate.js,这里提到:http://blogs.msdn.com/b/aaron_margosis/archive/2007/07/01/scripting-elevation-on-vista.aspx)或elevate32.exe/elevate64.exe(http://www.westmesatech.com/misctools.html)在启动可执行文件时激发UAC提示。 – 2013-03-11 14:27:22

+0

“以管理员身份运行”将是可执行文件的属性,而不是快捷方式。将其标记为以管理员身份运行将会产生其他尝试使用它的副作用,提示升级。 – Deanna 2013-03-11 16:36:23

-1

如果你的可执行文件需要管理员权限,那么你应该add an appropriate manifest to your executable,不要尝试和提升HTML应用程序。

+0

这取决于您是否确实可以更改可执行文件的清单。如果不是的话,你需要升级mshta.exe。 – 2013-03-11 17:22:00

0

检查此示例:

<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>