2011-01-21 313 views
0

我有一個Winforms應用程序,我想使用ClickOnce進行發佈。此應用程序附帶一個初始數據庫,該數據庫必須在每臺計算機上安裝一次。經過不少的努力,我已經着手使用自定義先決條件來安裝.sdf文件。我使用了Bootstrapper Manifest Generator(BMG)爲我想運行的.cmd文件創建一個包,並且將.sdf文件作爲「附加文件」。以數據庫爲前提的ClickOnce部署

我的期望是這兩個文件最終會在同一個目錄下,我將能夠將.sdf文件複製到我想要的地方(它們最終會在同一個目錄中).pre在Visual Studio中出現的必備條件很好。它可以很好地部署到客戶端系統,安裝程序可以很好地啓動前提條件。

唯一的問題是,.cmd文件正在執行的當前工作目錄是C:\ Documents and Settings \\ Desktop!

這兩個文件(.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 

謝謝, 大衛

回答

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 

第二先決條件是「所有用戶=真」設置,其具有位於默認位置的自定義文件夾項目: 「[COMMONAPPDATAFOLDER] [生產] [產品名稱]」。 到這個文件夾我把sdf文件。

最後,我使用Bootstrapper Manifest Generator爲兩者打包,使得第二個依賴於第一個。我將這些軟件包複製到相應的VS2010目錄,將它們作爲先決條件包含併發布。

我現在已經將每臺機器的.sdf文件發佈到WinXP和Win7。爲什麼這必須如此困難!?!?

我仍然在尋找不那麼複雜的解決方案,它將安裝到Windows 7和Windows XP。

0

你嘗試MSDeploy?它能夠滿足您的所有需求。

乾杯!

+0

它似乎沒有問題 – 2011-01-22 00:07:06

0

您可以在ClickOnce應用程序中包含.sdf文件,然後讓程序在第一次運行時將其複製到其他位置。無論如何,我從來都不建議將數據保存在CLickOnce緩存中,但自己處理它會更安全。看看這篇文章是否有所幫助: http://robindotnet.wordpress.com/2009/08/19/where-do-i-put-my-data-to-keep-it-safe-from-clickonce-updates/

+0

喜羅賓。我在研究過程中碰到了你的文章,這對定義問題很有幫助。但是,我的情況不同的是,我需要一臺每臺機器(又名「CommonAppDataFolder」)數據庫而不是每個用戶數據庫。 (可以考慮使用電腦控制的實驗室設備或類似的安排,任何用戶都可以登錄,登錄到計算機,並且需要訪問通用的每臺計算機數據庫。) – 2011-01-27 18:13:21