2

プログラムファイルディレクトリのサブフォルダにデータベースファイルを保存するアプリケーションがあります。これらのファイルは、VistaおよびWindows 7のVirtualStoreにリダイレクトされます。MicrosoftDataReports(VB6)を使用してデータベースからのデータを表します。ここまでは順調ですね。

ただし、CrystalReportsXIを使用してデータベースのデータを表す必要があります。私たちのアイデアは、このデータをプログラムからCRに渡すのではなく、ODBCを介してシステムDSNを使用してデータベースからCRにデータを取得させることです。このようにして、ユーザーが独自のレポートをより柔軟に設計できるようにしたいと考えています。ただし、ユーザーがプログラムをインストールしたとき、またはプログラムがCrystal Reportを呼び出したときに、これらのシステムDSNが正しく構成されていることを確認したいと思います。

たとえば、OSのバージョン、OSでUACが有効になっているかどうか、Program Filesフォルダーの書き込み制限が解除されているかどうかをチェックするルーチンを作成する代わりに、システム変数を使用してこれを行うスマートな方法はありますか?次に、C:\ Program Files \ OurApp \ DataフォルダーまたはC:\ Users \ User \ AppData \ VirtualStore \ Program Files \ OurApp \ Dataフォルダーのいずれかを指すようにシステムDSNを調整しますか?

まったく異なるアプローチの提案も歓迎します!

4

4 に答える 4

3

新しいアプリケーションには、requestedExecutionLevelを指定するアプリケーションマニフェストが必要です。これにより、プログラムが「Vista対応」であることが宣言され、仮想化の試みがバイパスされます。

インストール中に、[CommonAppData] \ Company \ App \ Fullのようなフォルダーを作成し、このフォルダーにセキュリティを設定して、全員(またはユーザー)によるフルアクセスを許可する必要があります。データベースをこのフォルダーに配置します。

MDBの場合、ここにデータベースをドロップできます。クライアント/サーバーデータベースの場合は、ここにUDLファイルを配置します。ユニバーサルデータリンク(.udl)ファイルの使用も参照してください。

ODBCとDSNは、かなり時代遅れのテクノロジーです。

提案されたアプローチを使用すると、最も古いWin95コンピュータ以外のほとんどすべてで機能するはずです。

于 2010-04-26T17:15:14.570 に答える
1

これはAccessデータベースですか?指定していません。

Accessデータベースの場合、DSNをインストールするときに特定のデータベースを指す必要はありません。実行時に異なるデータベースを指すように接続文字列を変更できます(詳細)。例えば

Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;

実行時にインストールパスを読み取り(VB6ではApp.Path)、別の接続文字列をCrystal Reportsに送信できますか?

于 2010-04-26T11:26:18.640 に答える
1

Virtual Storeがすべてを処理しているように見えるので、データベースがVirtual Storeに再配置されている場合でも、DSNをC:\ Program Files \ MyApp \ Data\mydb.mdbに露骨に向けることができます。

于 2010-06-03T10:24:33.887 に答える
0

現行版


システムが実行しているWindowsの現在のバージョンを検出することをお勧めします。

これは、正しいPATHを決定するのに役立ちます。

Windowsのバージョン、ビルド、リビジョン番号を見つける方法は??

レジストリキーを読む–

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber  
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentVersion
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\EditionID  
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProductId 
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\BuildLabEx

CurrentBuildNumberは、Windowsビルド番号です。その場合、CurrentVersion値はWindowsのバージョン、つまりWindows 7、Windows Vista、WindowsXPなどのバージョンです。EditionIDとProductIdはwindows-editionとproduct-idを認識します。

キーBuildLabExには、ビルド番号とリビジョン番号が含まれています。

たとえば、値6001.17387.x86fre.vistasp1_gdr.070927-1921

  • 最初の4桁はビルド番号、つまり6001と

  • 次の5桁は、Windowsのリビジョン番号(17387)を表します。

  • x86は、32ビットオペレーティングシステムを実行していることを示します。

あなたもこれに興味があるかもしれません:
本当のWindowsバージョンを検出する方法?

幸運を!!

于 2010-04-25T09:40:25.140 に答える