2017-10-11 5 views
3

私は数年前からうまく機能していた既存のWindowsデスクトップアプリケーションの新しいバージョンを作成しています。アプリケーションは、SqlServerCeデータベースを使用します。このデータベースは、コンピュータのDataDirectoryにインストールされます。新しいバージョンのアプリケーションは、64ビットマシンと互換性があるように作成されています。 MacBookでWindows 10を実行しているParallels VMにコードを移行し、Visual Studio 2017を使用して新しいバージョンをビルドしています。ビルドはうまく動作します(インストールファイルを作成するためにセットアップウィザードプロジェクトを使用しています)。しかし、アプリケーションをインストールすると、データベースへの最初のアクセス時にエラーが発生します。64ビットWindowsマシンのビルドを作成するときに「データベースファイルへのアクセスが許可されていません」というエラーが表示される

エラーは次のとおりです。 データベースファイルへのアクセスは許可されていません。 [1884、ファイル名= C:\ ProgramData \ CompanyName \ ApplicationName \ AppDataBase.sdf、SeCreateFile]。

.sdfは読み取り専用としてマークされていません。 .sdfファイルに移動して、それがインストールされ、(ファイルエクスプローラを使用して)E​​veryoneに読み取り、書き込み、変更の権限を与えると、アプリケーションはファイルにアクセスでき、エラーは発生しません。しかし、File.SetAccessControlを使用してコード内からこれを実行しようとすると、アクセスエラーが再び発生します。セットアップウィザードの機能(ファイルシステムビュー)を使用して、インストールプロセス中に.sdfファイルのアクセス許可を設定する方法はありません。 Visual Studio 2010を使用して構築し、x86マシン上で展開するとき

<connectionStrings> 
<add name="ApplicationName.Properties.Settings.ApplicationNameConnectionString" 
      connectionString="Data Source=|DataDirectory|AppDataBase.sdf" 
      providerName="Microsoft.SqlServerCe.Client.4.0" /> 
</connectionStrings> 

これはうまく働いた:ここ

は、私が使用しています接続文字列です。アドバイスをいただきありがとうございます。

答えて

0

本質的には、あなたの場所が間違っています。 Windows 7(およびそれ以上)用の%SystemDrive%\ProgramData\MyCompany\MyAppフォルダは、デフォルトでは管理者以外のユーザーのために読み取り専用であり、マシン構成のものに使用する必要があります。私はあなたが

https://blogs.msdn.microsoft.com/patricka/2010/03/18/where-should-i-store-my-data-and-configuration-files-if-i-target-multiple-os-versions/

正しい場所(私はそれは、複数のユーザー間で共有されるべきDBファイルをあるという事実に基づかと仮定しています)マシンごとにある「ドキュメント」

を読んでお勧めしますユーザー間で使用される アプリケーションで、ユーザーが作成/開く/閉じる/保存する「ドキュメント」タイプのファイル。これらは通常、テンプレートまたは 公開ドキュメントです。

例:MyTemplate。ドット

のWindows 7:C:\ユーザーが公開

Vistaを\:%SystemDrive%に\ユーザーがパブリック

XPを\:%ALLUSERSPROFILE%\ドキュメント

環境変数:

ビスタ/ Win7:%PUBLIC%注:XPに存在しません

既知のフォルダID:FOLDERID_PublicDocuments

System.Environment.SpecialFolder:System.Environment.SpecialFolder.CommonDocuments

CSIDL:CSIDL_COMMON_DOCUMENTS

+0

ありがとうございます!これは私が探していたものです!私はProgramDataの場所を操作するコード内の何かを削除し、アプリケーションを公開する方法として従来のDeploymentプロジェクトを削除しました。次に、(すべての設定を確認した後で)プロジェクトの公開機能を使用しました。どうもありがとう。私はフォルダの場所の変更について私に知らせるものは見ていなかったので、私は長い間それを苦労していたでしょう。 – rogdawg

2

また、あなたを確認して、それがUAC

はあなたがexeファイル(ないMSI)を実行していることを確認してくださいすることができような音と、あなたのインストーラプロジェクト

ためLaunchConditionsにtrueに特権セットを持っていること右クリックして[管理者として実行]を選択してアプリケーションを実行してください。

+0

ありがとうございます。私は管理者として(.msiファイルの代わりにSetup.exeを使用して)インストーラを実行しましたが、アプリケーションを実行するとエラーが表示されます。アプリケーションの要件の1つは、通常の管理者以外の人がそれを実行できることです。これまでは、ProgramDataディレクトリのサブディレクトリにデータベースを置いたときに動作しました(ディレクトリではないのですか?)。しかし、今ではうまくいかず、私はそれを再び働かせる方法を見つけることができません。うん! – rogdawg

+0

明示するには:アプリケーションを管理者として実行すると機能します。しかし、私が言ったように、アプリケーションの要件の1つは、通常の権限で実行する必要があるということです。 – rogdawg

0

はなぜ単に%のAPPDATA%を使用しませんか?

関連する問題