0

管理者として実行されるvb6で書かれた古い更新プログラムがあります。ただし、管理者として実行されるため、ダウンロードして保存するすべてのファイルは、他のユーザーに対して読み取り専用になります。共有アプリケーション データ フォルダー (問題のファイルを保存している場所) のような公共の場所にあるファイルも同様です。

「vista互換」リリースの前にこれを見つけたのは幸運です。Vista は、管理者以外の書き込みと今後の読み取りを一種の「仮想」フォルダにリダイレクトすることで、問題を隠します。ただし、次の更新でファイルが置き換えられる可能性があり、管理者以外のプログラムは引き続き仮想フォルダーに移動し、古いファイルを使用します。

管理者ユーザーとして、vb6 で作成したファイルを他のユーザーが完全に制御できるようにするにはどうすればよいですか?

4

2 に答える 2

2

私がこれを行う方法は、インストーラーの責任にすることです。

VSI 1.1 を使用して、アプリケーションのインストーラ MSI を作成します。CommonAppDataFolder の下にアプリケーション データ フォルダーを作成します。

ビルド後のステップとして、スクリプトを実行して以下を実行します。

  1. マシンごとのインストール用に MSI データベースを設定します: プロパティ テーブル、ALLUSERS が 1 に設定された行。
  2. ディレクトリ テーブルで、CommonAppDataFolder のエントリを見つけ、そのディレクトリ インデックスを取得します。このインデックスを使用して、CommonAppDataFolder が親であるエントリのディレクトリ テーブルをクエリし、そのインデックスを取得します (これはアプリ データ サブフォルダです)。
  3. ファイル テーブルを調べて、プログラムのコンポーネント インデックスを取得します。
  4. データベースに CreateFolder テーブルが存在しない場合は作成します。そのインデックスによって目的のアプリケーション サブディレクトリの CreateFolder に行を追加し、それをプログラムのコンポーネント インデックスに関連付けます。
  5. LockPermissions テーブルが存在しない場合は作成します。アプリケーション データ サブディレクトリに新しい LockPermissions 行を挿入し、Everyone に割り当てますFILE_ALL_ACCESS

それはそれについてです。

この方法で行うか、VSI 1.1 を使用してから Orca を使用して MSI を編集するか、おそらくサード パーティの MSI オーサリング ツールを使用して、これらのエントリを GUI 経由で設定し、インストーラ プロジェクトに保存することができます。各 VSI 1.1 ビルドの後に実行する小さな WSH スクリプトを使用するだけです。

私の知る限り、これはWindowsアプリケーションのガイドラインに従って、そのようなことを達成するための推奨される方法です。より手の込んだニーズがある場合は、複数のサブディレクトリまたはサブサブディレクトリを使用して、フル アクセスを許可するもの、読み取り専用のものなどを使用できます。

プログラムは、Shell オートメーション オブジェクトを使用するか、Shell32 を標準 DLL として呼び出す (Declare Function または TLB を使用) ことによって、フォルダーを見つけることができます。

于 2009-09-02T22:09:06.590 に答える
1

誰がファイルを書き込むかではなく、どこに書き込むかです。プログラム ファイル フォルダーとそのサブ フォルダーは、既定ではすべての標準ユーザーに対して読み取り専用です。代わりに、All Users Application Data フォルダーを使用してみてください。

これは、Vista を念頭に置いて設計されていないため、VB6 では少し注意が必要です。関連するフォルダーの一部の名前が変更されたため、「関数の宣言」エイリアスを使用してWindows APIを直接呼び出す以外に、vb6に必要な正確なフォルダーを提供する方法がわかりません。

したがって、適切な場所を見つけるために私が知っている最も簡単で信頼できる方法は、%ALLUSERSPROFILE%環境変数を使用することです。これはC:\Documents and Settings\All Users、XP ではデフォルトで " " を返しC:\ProgramData、Vista ではデフォルトで " " を返します。そこから、「Application Data」フォルダーを探すことができます。そこには存在せず、Vista では必要ありませんが、存在しない場合に作成しても問題はありません。これにより、両方のシステムで一貫したフォルダー構造が得られ、そこからアプリがワークスペースとして使用するサブフォルダーを作成できます。

最後に、これは Vista の新しい変更ではありません。Program Files フォルダーは、既定では常に標準ユーザーに対して読み取り専用になっています。XPも同じように機能しました。非常に多くの人が XP で管理者として実行されているため、問題を解決できる可能性があります。

于 2009-09-02T20:41:10.620 に答える