1

ClickOnce を使用して公開したい Winforms アプリケーションがあります。このアプリケーションには初期データベースが付属しており、マシンごとに 1 回インストールする必要があります。苦労の末、カスタム前提条件を使用して .sdf ファイルをインストールするというアイデアにたどり着きました。Bootstrapper Manifest Generator (BMG) を使用して、実行したい .cmd ファイルのパッケージを作成し、.sdf ファイルを「追加ファイル」として含めました。

私の期待は、2 つのファイルが同じディレクトリに配置され、.sdf ファイルを必要な場所にコピーできることでした (それらは同じディレクトリに配置されます)。前提条件が表示されます。 Visual Studio では問題ありません。クライアント システムに正常に展開され、セットアップ プログラムによって前提条件が正常に開始されます。

唯一の問題は、.cmd ファイルが実行されている現在の作業ディレクトリが C:\Documents and Settings\\Desktop であることです。

2 つのファイル (.cmd または .sdf) のどちらもそこにはありません。たとえば、「C:\Documents and Settings\drogers\Local Settings\Temp\VSD5A.tmp」などの場所にダウンロードされています。したがって、どこに xcopy するかはわかっていますが、どこから xcopy するかはわかりません。

どうすればこれを解決できますか?

.cmd ファイルは次のとおりです。

REM Modify this file to reflect your manufacturer name [FHCRC] and product name [ClickOnceSharedDataDemo].
SET TargetBase=%ALLUSERSPROFILE%
IF NOT "%TargetBase%"=="C:\ProgramData" SET TargetBase=%ALLUSERSPROFILE%\Application Data
REM We only want to do this copy for the first user!
if exist "%TargetBase%\FHCRC\ClickOnceSharedDataDemo\shareddata.sdf" GOTO EXIT
if not exist "%TargetBase%\FHCRC" mkdir "%TargetBase%\FHCRC"
if not exist "%TargetBase%\FHCRC\ClickOnceSharedDataDemo" mkdir "%TargetBase%\FHCRC\ClickOnceSharedDataDemo"
CACLS "%TargetBase%\FHCRC\ClickOnceSharedDataDemo" /E /T /C /G "Users":C
xcopy shareddata.sdf "%TargetBase%\FHCRC\ClickOnceSharedDataDemo\"
if not exist "%TargetBase%\FHCRC\ClickOnceSharedDataDemo\shareddata.sdf" PAUSE
if not exist "%TargetBase%\FHCRC\ClickOnceSharedDataDemo\shareddata.sdf" exit /B -1
:EXIT
PAUSE
exit /B 0

ありがとう、デビッド

4

3 に答える 3

1

まあ、私はこの解決策に完全に満足しているわけではありませんが、それは機能します。現在、2つの前提条件があります。1つ目は、CACLSコマンドを実行して権限を設定するコマンドファイルです。これは基本的に上記の短縮版です。

REM Modify this file to reflect your manufacturer name [Manufacturer] and product name [ProductName].
SET TargetBase=%ALLUSERSPROFILE%
IF NOT "%TargetBase%"=="C:\ProgramData" SET TargetBase=%ALLUSERSPROFILE%\Application Data
REM We only want to do this copy for the first user!
if exist "%TargetBase%\Manufacturer\ProductName\shareddata.sdf" GOTO EXIT
if not exist "%TargetBase%\Manufacturer" mkdir "%TargetBase%\Manufacturer"
if not exist "%TargetBase%\Manufacturer\ProductName" mkdir "%TargetBase%\Manufacturer\ProductName"
CACLS "%TargetBase%\Manufacturer\ProductName" /E /T /C /G "Users":C
:EXIT
ECHO exit /B 0

2番目の前提条件は、デフォルトの場所「[CommonAppDataFolder][Manufacturer][ProductName]」にカスタムフォルダーがある「allusers=true」セットアッププロジェクトです。このフォルダにsdfファイルを入れました。

最後に、Bootstrapper Manifest Generatorを使用して両方のパッケージを作成し、2番目を最初に依存させました。パッケージを適切なVS2010ディレクトリにコピーし、前提条件として含めて公開しました。

これで、マシンごとの.sdfファイルがWinXPとWin7の両方に公開されました。なぜこれがそんなに難しいのか!?!?

私はまだ、Windows7とWindowsXPの両方にインストールできるそれほど複雑でないソリューションを探しています。

于 2011-01-22T00:06:06.053 に答える
0

ClickOnce アプリケーションに .sdf ファイルを含めるだけで、プログラムを最初に実行するときに別の場所にコピーすることができます。いずれにせよ、CLickOnce キャッシュにデータを保持することは決してお勧めしません。自分で処理する方が安全です。この記事がまったく役立つかどうかを確認してください: http://robindotnet.wordpress.com/2009/08/19/where-do-i-put-my-data-to-keep-it-safe-from-clickonce-updates/

于 2011-01-27T09:00:30.320 に答える
0

MSDeploy を試しましたか? それはあなたのすべてのニーズを満たすことができます。

乾杯!

于 2011-01-21T21:33:18.173 に答える