2017-11-30 22 views
0

マシンごとのインストールを実行するためにエスカレートする必要があるWiXツールセットで作成されたインストーラがありますが、ライセンス情報)を現在のユーザーのフォルダに保存する必要があります。なぜなら、エスカレートされていない状態で実行すると、後でアプリケーションにアクセスする必要があるからです。WIX - ユーザーのAppDataフォルダをインストールする代わりに管理者のAppDataフォルダを取得する

別の言い方をすれば、インストーラ内からrundll32を使用していくつかの機能を起動し、管理者の資格情報をUACプロンプトに入力した特権のないユーザーがインストーラを実行すると、ローカルのAppDataフォルダのパスインストールするユーザーではなくAdminのフォルダへのパスを取得します。

これは、プログラムが管理者の特権的なコンテキストで実行されているので、これは意味があると思います。しかし、我々は本当にインストールユーザーの情報が必要です。そして、いいえ、私たちはそれを純粋なユーザーごとのインストールにすることはできません。

エスカレーションの管理者資格情報を提供された特権のないユーザーによってアプリケーションがインストールされている場合、元の非特権ユーザーに対応するフォルダ領域を特定する方法はありますか。

ありがとうございました。

答えて

1

文字通り、フォルダを取得するためのコードを呼び出すコードがある場合、これはしばしば問題になります。たとえば、偽装によってユーザーのプロファイルが読み込まれることはありません(対話型ログオンのように)ので、フォルダの場所が予期しないものになる可能性があります。

  1. は、カスタムアクションに[AppDataFolder]プロパティを渡すと、それはあなたがしたい一つだ場合は以下を参照してください

    は、彼らが動作する場合、私は知りませんが、あなたが試すことができますがいくつかあります。私は、これらのフォルダの場所は、インストールの早い段階(高度の前)で解決され、現在のユーザーの場所かもしれないと思います。

  2. LogonUserプロパティとUserSidプロパティは、現在の対話ユーザーを参照します。ここで説明するようにあなたがImpersonateLogedOnUser、ShGetFolderPath、レジストリの負荷の変化にパスを取得することができるかもしれない:

How can I get the path of a Windows "special folder" for a specific user?

0

私はあなたのAPI呼び出しでこれを複雑に超えていると思います。インストールが完了すると、インストーラは再度実行することができます。これは復元力を使用してトリガーすることができます。または、アクティブなセットアップキーを押して修復を強制することができます。インストーラが再度実行されると、現在のユーザーを評価し、ユーザーごとのコンポーネントを再インストールできます。

このタイプの動作は、しばしば壊れたり迷惑なものと誤解されるため、マシン単位の場所にこれらのファイルをインストールし、アプリケーションを実行するときにアプリケーションをユーザごとの場所にコピーさせることが考えられます。

+0

ありがとうございますが、あなたの提案は私たちのニーズに適していません。 重要な問題は、インストールが特定のユーザーによって実行されていることですが、インストールには管理者特権レベルへのエスカレーションが必要ですが、インストールログはユーザーの領域にある必要があります。ユーザが特権を持たないユーザであれば、データはバグ報告者サブシステムで利用可能であり、したがって私たちに送られます。私はバグ記者をエスカレートさせたくありません。 – NoelC

関連する問題