2009-09-02 17 views
0

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

「vista-compatible」リリースの前にこれを見つけたのは幸いです。 Vistaは管理者以外の書き込みと将来の読み取りをsortof 'virtual'フォルダにリダイレクトすることで問題を隠蔽します。しかし、次のアップデートでファイルが置き換えられ、管理者以外のプログラムは引き続き仮想フォルダに移動し、古いファイルを使用します。

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

答えて

2

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

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

  • に設定ALLUSERSを持つ行、Propertyテーブル:マシンごとのインストール用にMSIデータベースを設定

    1. :ビルド後のステップとして

      以下を実行するためのスクリプトを実行しますディレクトリテーブルを開き、CommonAppDataFolderのエントリを見つけて、ディレクトリIndexを取得します。このインデックスを使用して、CommonAppDataFolderが親であるエントリをディレクトリテーブルに照会し、インデックスを取得します(これはアプリケーションデータサブフォルダです)。

    2. ファイルテーブルを調べて、プログラムのコンポーネントインデックスを取得します。
    3. データベースにCreateFolderテーブルが存在しない場合は作成します。目的のアプリケーションサブディレクトリのIndexをCreateFolderに追加し、プログラムのコンポーネントIndexに関連付けます。
    4. LockPermissionsテーブルが存在しない場合は作成します。アプリケーションデータサブディレクトリの新しいLockPermissions行を挿入し、EveryoneにFILE_ALL_ACCESSを付けます。

    それはそれです。

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

    AFAIKこれは、Windowsアプリケーションのガイドラインに従ってこのようなことを行うのに推奨される方法です。必要な場合は、複数のサブディレクトリやサブディレクトリを使用して、完全なアクセス、一部の読み取り専用などを行うことができます。

    プログラムは、シェルオートメーションオブジェクトを使用するか、Shell32を標準DLL宣言機能またはTLB)。

  • +0

    通常のアクセスを許可するために私のプログラムのデータフォルダをセットアップすれば問題は解決されるはずですか? –

    +0

    それは私が考えると思います。私はあなたのVB6プログラムからこれを行うために周りに浮かんで良い短いコードがあるかどうかはわかりません。 – Bob77

    1

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

    これはVB6を少し厄介です。なぜなら、Vistaを念頭に置いて設計されていないからです。関連フォルダのいくつかの名前が変更されたため、「宣言関数」エイリアスを使用してWindows APIに直接呼び出すことができない正確なフォルダをvb6に提供する方法がありません。

    したがって、適切な場所を見つけるための最も簡単で信頼できる方法は、%ALLUSERSPROFILE%環境変数を使用することです。 XPではデフォルトで "C:\Documents and Settings\All Users"、Vistaではデフォルトで "C:\ProgramData"が返されます。そこから "Application Data"フォルダを探すことができます。それはそこにはなく、あなたはVista上でそれを必要としませんが、存在しなければそれを作成しても何も傷つけません。これにより、両方のシステムで一貫性のあるフォルダ構造が得られ、アプリケーションのサブフォルダを作成して作業領域として使用することができます。

    最後に、これはVistaの新しい変更ではありません。 Program Filesフォルダは、既定では常に標準ユーザーに対して読み取り専用です。 XPも同じように動作しました。 XPでは管理者として非常に多くの人が走っているので、それを手放すことができるかもしれません。

    +0

    問題のファイルは、すべてのユーザー(VistaのC:\ AppData)のアプリケーションデータフォルダにあります。また、アップデータはプログラムファイルを変更して登録します。管理者として実行する必要があります。 –

    +0

    複数のユーザーが共有するプログラムを更新するには、管理者権限が必要です。これは、システム管理者の視点から見れば分かります。ただし、プログラム以外のファイルがApp Dataフォルダからあなたのために働いていないことは奇妙です。セキュリティオプションをチェックして、誰が権利を持っているか確認しましたか? –

    +0

    アップデータによって作成または置換されたファイルは、標準ユーザーの場合は読み取り専用です。しかし、私は通常のユーザーにアプリケーションデータファイルに対する完全なアクセス権を与えて、プログラムが機能するようにしたい。 –

    関連する問題