Копирование файлов на удаленный сервер с помощью проекта установки - PullRequest
4 голосов
/ 19 июля 2011

Я пытаюсь создать установочный пакет, который не только устанавливает наше приложение, но и копирует файлы на удаленный сервер приложений и устанавливает там службу.Я думал, что просто переопределю метод установки в настраиваемом действии, чтобы он запускал скрипт powershell для копирования файлов.К сожалению, когда код вызывает сценарий powershell, я получаю это CmdletProviderInvocationException :

Система обнаружила возможную попытку поставить под угрозу безопасность.Убедитесь, что вы можете связаться с сервером, который вас аутентифицировал.

Мне удалось скопировать код, который я использую для вызова скрипта powershell, в тестовый проект, и он работал нормально, как и следовало ожидатьтак как я вошел на сервер через проводник Windows и поэтому мой пользователь должен пройти аутентификацию.Я думаю, что причина, по которой скрипт не будет работать при вызове установщиком, заключается в том, что установщик переключает пользователей, чтобы получить права администратора для установки приложения, а пользователь-администратор не аутентифицирован (хотя я могу ошибаться).

Кто-нибудь знает, как я мог заставить это работать?

Вот код настраиваемого действия:

Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();

Pipeline pipeline = runspace.CreatePipeline();
string scriptLoc = "c:\\sampleLocation";
pipeline.Commands.AddScript("&\"" + scriptLoc + "\\script.ps1\"");

Collection<PSObject> results = pipeline.Invoke();

runspace.Close();

и вот сценарий:

$RemotePath = "\\SERVER\C$\Shared\Service"
$Source = "C:\sampleLocation\Service"

Get-ChildItem $Source -Recurse | Copy-Item -Destination $RemotePath

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Для копирования файлов в сетевое хранилище существует два основных требования:

  • Ваше пользовательское действие должно запускаться без олицетворения
  • сетевое расположение должно иметь полные права доступа для всех

Установка MSI выполняется под учетной записью локальной системы. Так что не имеет значения, есть ли у вас разрешения или нет.

Поскольку дать учетную запись SYSTEM с сетевого компьютера нелегко, самый простой подход - предоставить полные права всем пользователям. Это необходимо сделать на компьютере, на котором находится общая папка.

0 голосов
/ 19 июля 2011

Согласно документации @Cosmin Pirvu и Microsoft:

Учетная запись LocalSystem является предопределенной локальной учетной записью, используемой диспетчером управления службами.Он имеет широкие привилегии на локальном компьютере и действует как компьютер в сети.

Если ваша общая папка находится на компьютере, который находится в домене, вы можете дать клиенту полный доступ к полному разрешению, несмотря на предоставлениеЭто для всех.

enter image description here

...