0

私は、ユーザーがいくつかの情報を取得し、いくつかの設定を自分で行うことができる一種の GUI をユーザーに表示することで、ソフトウェアの展開をよりユーザーフレンドリーにしようとしています。私が遭遇した問題は、GUI (HTA vbscrtipt) として機能するスクリプトがシステム アカウントを介して実行されるため、ユーザーに直接表示されないことです。代わりに、ユーザーは「対話型サービスの検出」というメッセージを受け取ります (Windows 7 の UIODetect サービスによって初期化されます)。そのメッセージをクリックすると、ユーザーは GUI を見ることができます。GUI をユーザーに直接表示する方法はありますか? ユーザー用のタスクを作成するのと同じで、スクリプトを特権権限で実行する (ユーザーには管理者権限がない) ようなものでしょうか?

4

3 に答える 3

1

あなたが抱えている問題は、セッション 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://csi-windows.com/toolkit/csi-msgq

于 2013-06-03T22:27:59.737 に答える
0

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>
于 2014-06-21T05:52:21.580 に答える