Развертывание ClickOnce с базой данных в качестве предварительного условия

StackOverflow https://stackoverflow.com/questions/4763904

Вопрос

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

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

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

Ни один из двух файлов (.cmd или .sdf) там не находится - они были загружены в другом месте, например, "C:\Documents и настройки \дрогеры \Локальные настройки \ 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

Спасибо, Дэвид

Это было полезно?

Решение

Что ж, я не совсем доволен этим решением, но оно работает.Теперь у меня есть два предварительных условия.первый - это просто командный файл, который запускает команды 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

Вторым предварительным условием является проект установки "все пользователи = true", в котором есть пользовательская папка, расположенная по умолчанию:"[CommonAppDataFolder][Производитель][Имя продукта]".В эту папку я поместил sdf-файл.

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

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

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

Другие советы

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

Ваше здоровье!

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top