Развертывание ClickOnce с базой данных как предварительное условие - PullRequest
0 голосов
/ 22 января 2011

У меня есть приложение Winforms, которое я хочу опубликовать с помощью ClickOnce. Это приложение поставляется с начальной базой данных, которую необходимо установить один раз для каждой машины. После долгих раздумий я натолкнулся на идею использования пользовательского предварительного условия для установки файла .sdf. Я использовал Bootstrapper Manifest Generator (BMG) для создания пакета для файла .cmd, который я хочу запустить, и включил файл .sdf в качестве «дополнительного файла».

Я ожидал, что эти два файла окажутся в одном и том же каталоге, и я смогу скопировать файл .sdf в то место, где я хочу (они в конечном итоге окажутся в одном каталоге.) реквизит обнаруживается в Visual Studio просто отлично. Он отлично разворачивается на клиентской системе, и программа установки отлично запускает предварительное условие.

Единственная проблема заключается в том, что текущим рабочим каталогом, который выполняет файл .cmd, является C: \ Documents and Settings \\ Desktop!

Ни один из двух файлов (.cmd или .sdf) не находится там - они были загружены в другом месте, например, "C: \ Documents and Settings \ drogers \ Local Settings \ Temp \ VSD5A.tmp". Итак, хотя я знаю, куда делать копию, я понятия не имею, откуда делать копию.

Как мне решить эту проблему?

Вот файл .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

Спасибо, David

Ответы [ 3 ]

1 голос
/ 22 января 2011

Ну, я не совсем доволен этим решением, но оно работает. Теперь у меня есть две предпосылки. первый - это просто командный файл, который запускает команды 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] [Производитель] [ProductName]". В эту папку я положил файл sdf.

Наконец, я использовал Bootstrapper Manifest Generator для создания пакетов для обоих, делая вторую зависимой от первой. Я скопировал пакеты в соответствующий каталог VS2010, включил их в качестве предварительных условий и опубликовал.

Теперь у меня есть файлы .sdf для каждой машины, опубликованные как в WinXP, так и в Win7. Почему это должно быть так сложно!?!?

Я все еще ищу менее сложные решения, которые можно будет установить как на Windows 7, так и на Windows XP.

0 голосов
/ 27 января 2011

Вы можете просто включить файл .sdf в приложение ClickOnce, а затем, при первом запуске, ваша программа скопирует его в другое место.В любом случае, я никогда не рекомендую хранить данные в кэше CLickOnce, безопаснее обрабатывать их самостоятельно.Посмотрите, поможет ли эта статья вообще: http://robindotnet.wordpress.com/2009/08/19/where-do-i-put-my-data-to-keep-it-safe-from-clickonce-updates/

0 голосов
/ 22 января 2011

Вы пробовали MSDeploy?Он способен удовлетворить все ваши потребности.

Ура!

...