2

共通データフォルダ(CSIDL_COMMON_APPDATA)のサブディレクトリにAccessファイルをインストールするレガシーVB6プログラムがあります。このプログラムを64ビットVistaシステムにインストールしました。プログラムは正常に動作し、C:\ ProgramData \ Wow \ WowCat.mdbにあるファイルにアクセスしますが、このファイルはWindowsエクスプローラーに表示されません。

このデータベースを古いPCから取得した新しいバージョンで上書きしたいのですが、エクスプローラーを使用すると、C:\ ProgramData \ Wow \にファイルが表示されません(すべての非表示ファイルとシステムファイルを表示しています)。とにかく新しいWowCat.mdbをコピーしても、プログラムは古いもので動作します。

VBでコードをステップ実行すると、C:\ ProgramData \ Wow\WowCat.mdbにあるファイルが確実に開かれます。C:ドライブを検索すると、新しいコピーのみが表示されます。プログラムがアクセスしているコピーはどこにありますか?

4

2 に答える 2

2

これは、WindowsVistaでのフォルダのリダイレクトが原因です。通常、C:\ Program Files-folderに何かを書き込む権限がない場合、Vistaはそれらの書き込みをユーザーディレクトリ内の「シークレット」フォルダにサイレントにリダイレクトします。ファイルは、ファイルを作成したユーザー(およびそのユーザーとして実行されているプログラム)には引き続き表示されますが、他のユーザーには表示されません。したがって、プログラムはおそらくExplorerとは異なるユーザーとして実行されているため、Explorerはそれを見ることができません。

Vista64ビットマシンのdir/aLからの次の出力を参照してください。

C:\ProgramData>dir /aL
 Volume in drive C has no label.
 Volume Serial Number is 74DB-58F8

 Directory of C:\ProgramData

02.11.2006  16:41    <JUNCTION>     Application Data [C:\ProgramData]
02.11.2006  16:41    <JUNCTION>     Desktop [C:\Users\Public\Desktop]
02.11.2006  16:41    <JUNCTION>     Documents [C:\Users\Public\Documents]
02.11.2006  16:41    <JUNCTION>     Favorites [C:\Users\Public\Favorites]
02.11.2006  16:41    <JUNCTION>     Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
02.11.2006  16:41    <JUNCTION>     Templates [C:\ProgramData\Microsoft\Windows\Templates]
               0 File(s)              0 bytes
               6 Dir(s)  62 040 051 712 bytes free

この機能は、どこで読んだかによって、再解析ポイントまたはジャンクションと呼ばれます。これらは、Unixのシンボリックリンクと非常によく似ています。

于 2008-12-26T12:10:19.030 に答える
0

これを適切に行うには、管理者特権で実行されている Windows インストーラー MSI またはレガシー インストーラーが必要であり、CommonAppDataFolder の下にサブフォルダーを作成し、このフォルダーにすべてのユーザー (または適切なグループ) にフル コントロールを与え、最後に MDB をそこに配置します。フォルダーを作成し、そこに MDB ファイルを移動して、ファイルのみにアクセス許可を設定することもできます。

昇格して実行された場合、または脱落を検出し、ジョブを実行する昇格されたプロセスを生成した場合、EXE 自体が最初の実行時にこれを行うことも可能です。標準では、このアクションは、UAC プロンプトをポップアップするだけでなく、UAC Shield アイコンが表示されたメニュー項目またはボタンから開始する必要があると規定されています。

ただし、MSI パッケージを使用すると、はるかに簡単になります。

于 2009-01-17T19:10:07.497 に答える