私は、ユーザーがいくつかの情報を取得し、いくつかの設定を自分で行うことができる一種の GUI をユーザーに表示することで、ソフトウェアの展開をよりユーザーフレンドリーにしようとしています。私が遭遇した問題は、GUI (HTA vbscrtipt) として機能するスクリプトがシステム アカウントを介して実行されるため、ユーザーに直接表示されないことです。代わりに、ユーザーは「対話型サービスの検出」というメッセージを受け取ります (Windows 7 の UIODetect サービスによって初期化されます)。そのメッセージをクリックすると、ユーザーは GUI を見ることができます。GUI をユーザーに直接表示する方法はありますか? ユーザー用のタスクを作成するのと同じで、スクリプトを特権権限で実行する (ユーザーには管理者権限がない) ようなものでしょうか?
3 に答える
あなたが抱えている問題は、セッション 0 の分離が原因です。セッション 0 の分離は、Vista 以降で導入されました。以下は、ウェブサイトからの抜粋です。
http://technet.microsoft.com/en-us/library/ee449431(v=ws.10).aspx
セッション 0 分離。Windows XP およびそれ以前のバージョンの Windows では、コンソールに最初にログオンしたユーザーと同じセッションですべてのサービスが実行されます。このセッションはセッション 0 と呼ばれます。セッション 0 でサービスとユーザー アプリケーションを一緒に実行すると、セキュリティ リスクが生じます。これは、サービスが昇格された特権で実行されるため、自身の特権レベルを上げる手段を探している悪意のあるエージェントの標的になるためです。Windows Vista および Windows 7 オペレーティング システムは、セッション 0 でサービスを分離し、セッション 0 を非対話型にすることで、このセキュリティ リスクを軽減します。この場合、システム プロセスとサービスのみがセッション 0 で実行されます。最初のユーザーはセッション 1 にログオンし、後続のユーザーは後続のセッションにログオンします。
この Web サイトは、解決策を提供するのに役立つ場合があります。
http://dieseyer.de/scr/elevate.hta を確認してください
と使用
関数 HTAElevate()
WinXP および Win7 で - 正常に動作します
<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>