2

ここで、作業中の MSI 展開に問題があります ( InstallShieldを使用)。ユーザーごとに実行する必要があるプログラムがバックグラウンドで実行されており、ユーザーの介入なしに自動的に開始する必要があります。

問題は、グループ ポリシー オブジェクト/ Active Directory (GPO/AD) の展開にあり、アプリケーションは、ログインしようとしているユーザーとしてではなく、誰かがログインする前にシステム コンテキストで開始されます。アプリケーションは、ユーザーごとに 1 回しか実行できません。 SYSTEM プロセスが USER プロセスの開始を妨げているようです。これは、ソフトウェアをユーザーに展開する前に、PC を 2 回再起動する必要があることを意味します。どうすればこれを止めることができますか?

基本的に現在のワークフローは次のとおりです。

  1. インストール/アップグレードが実行されます... バックグラウンド アプリケーションを強制終了します
  2. 新しいファイルをインストールする
  3. バックグラウンドアプリケーションの起動

これは、公開されたアプリケーションとインタラクティブなMSIインストールで機能します。問題があると思われるのは、「割り当てられた」アプリケーションのみです。ステップ3は、ユーザーコンテキストではなくSYSTEMコンテキストで発生するため:(

理想的には、システム コンテキストでの起動を防ぐために開発チームに EXE ファイルにパッチを当ててもらいたいのですが、それはリリース サイクルが先なので、暫定的にインストーラー ベースのソリューションを探しています。

(私はInstallscriptを知りません...だから、私が使用できるネイティブのInstallShieldのものがない場合、VBScriptがおそらく行くべき道だと思います。)

4

3 に答える 3

5

EXE を起動するアクションの条件として、Windows インストーラーのLogonUserプロパティを使用できます。

于 2008-08-27T09:18:24.917 に答える
1

AHA!よりクリーンなソリューションが必要であることを私は知っていました...私が取り組んでいたコードは次のようになり始めていました:

On Error Resume Next 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = 'BackgroundProcess.exe'")
For Each objProcess in colProcessList
    colProperties = objProcess.GetOwner(strNameOfUser,strUserDomain)
    If strNameOfUser = "SYSTEM" Then    
        objProcess.Terminate()
    End If
Next
于 2008-08-27T09:39:07.660 に答える
1

これを実現するために、Windowsインストーラーのプロパティに依存することはありません。私が正しく理解していれば、ユーザーごとに1回EXEファイルを実行したいのですが、おそらくユーザーのデフォルトを設定するためですか?正しいコンテキストにいることを保証できるのは、ユーザーが実際にログインしたときだけです。最近の平均的な展開シナリオでは、なりすましの量が多いため、実際のユーザーのログイン以外は何も信用していません。 EXEファイルを実行するステージ。

問題の原因が多すぎます:カスタム権限と特権のロックダウン、ターミナルサーバーのロックダウン、仮想化リダイレクト、展開システムによって実行される偽装、レジストリ書き込みのオペレーティングシステムのオーバーライドなど...

Microsoftには、アクティブセットアップと呼ばれる機能があり、ログオン時にユーザーごとに1回「実行可能なもの」を実行できます。これは、スクリプトから実行可能ファイルまで何でもかまいません。詳細については、こちらの回答を参照してください:WindowsServer2003ですべてのプロファイルのレジストリを更新する

于 2011-05-17T00:20:08.667 に答える