2011-11-10 5 views
2

管理者以外のユーザー(管理者以外のユーザーのディレクトリにファイルをコピーする)のユーザー単位でインストールできるMSIインストーラをビルドすることは可能ですが、プログラムファイルや他の管理専用ディレクトリに移動しますか? NSISには、通常のユーザーとして実行されるいくつかのステップと、昇格された特権で実行されるその他のステップを可能にするUACプラグインが存在します。このようなことがMSIに存在するのですか、または管理者権限を取得している間に元のユーザーコンテキストを保持する方法がありますか?ユーザー単位と管理者単位のWindowsインストーラ

答えて

2

いいえ、それは不可能です。インストールは、ユーザーコンテキストまたは昇格したシステムコンテキストで実行されます。

ただし、一部のファイルをユーザーのプロファイルにコピーすることはできません。これらのファイルは、フォルダに設定されている既定のアクセス許可を継承します。デフォルトは、ユーザー、システム、および管理者グループへのフルアクセスです。


技術的には可能ですが、使用することはお勧めしません。複数のユーザーがいるコンピュータを考えてください。そのうちの1人がMSIパッケージをインストールし、ユーザーのプロファイルにファイルをインストールします。別のユーザーがこのコンピュータにログオンし、[スタート]メニューからアプリケーションを起動します。ユーザーのプロファイルにはファイルがありませんが、そこにはアプリケーションが必要です。

この問題を解決する最善の方法は、ユーザーのプロファイルに入れたいファイルをProgram Filesにインストールすることです。アプリケーションの最初の起動時に、これらのファイルがユーザーのプロファイルにコピーされます。したがって、マルチユーザーコンピュータのすべてのユーザーがアプリケーションを使用できるようになります。

これらのデータをユーザー間で共有する場合は、ProgramDataにインストールすることを検討してください。CommonAppDataFolder propertyこの方法で、ファイルはすべてのコンピュータのユーザーに表示され、読み取り可能になります。ただし、アプリケーションをインストールしたユーザーだけが書き込みアクセス権を持つため、インストーラはProgramData内のアプリケーションフォルダに対するアクセス許可を変更して、他のユーザーに書き込み権限を与える必要があります。

+0

答えに同意します:インストーラでマシンごとのファイルをコピーして、最初の起動時にアプリをユーザープロファイルにコピーさせます。次に、そのユーザーのコピー操作が完了したことを示すために、HKCUにフラグを設定します。 しかし、インストーラがユーザコンテキストまたは昇格したシステムコンテキストで動作すると言うのは間違っています。実際には両方のコンテキストで実行されますが、インストールシーケンスのさまざまな時点で実行されます。簡略化して言えば、GUIはユーザーコンテキストで実行されますが、ファイルコピーは高い権限で実行されます。必要に応じて、別の回答として長い説明を追加することができます。空き容量が不足している –

+0

@Glytzhkofインストールプロセス(ファイルのコピー、レジストリエントリの作成)は、現在のユーザーコンテキスト、ユーザー単位のインストール、またはシステムごとのインストールではシステムコンテキストの高位で実行されます。 GUIウィザードは、常に現在のユーザーコンテキストで実行されます。 –

+0

あなたの提案の問題と、私が説明したことをやろうとしている理由は、問題のファイルがユーザーのappdataディレクトリに入っていなければならないということです(これはMS WordのグローバルテンプレートでWordはユーザーのSTARTUPディレクトリこれら)。 – alanc10n

2
+0

私が正しく理解しているのは、ユーザー単位またはすべてのユーザー単位でインストールできるインストーラです。私は両方のことを探しています。つまり、Program Filesのような管理専用の場所にファイルをインストールし、管理者以外のユーザー自身のディレクトリ(ユーザーのアプリケーションデータディレクトリなど)にいくつかのファイルをインストールします。 – alanc10n