簡體   English   中英

使用安裝項目將文件復制到遠程服務器

[英]Copying files to remote server with a Setup Project

我正在嘗試創建一個設置 package ,它不僅安裝我們的應用程序,而且還將文件復制到遠程應用程序服務器並在那里安裝服務。 我以為我會在自定義操作中覆蓋 install 方法,讓它啟動 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

將文件復制到網絡位置有兩個主要要求:

  • 您的自定義操作應該在沒有模擬的情況下運行
  • 網絡位置應該對所有人都具有完全權限

MSI 安裝在本地系統帳戶下運行。 所以不管你有沒有權限。

由於從網絡機器向 SYSTEM 帳戶授予權限並不容易,因此最簡單的方法是向所有人授予完全權限。 這需要在包含共享文件夾的機器上完成。

根據@Cosmin Pirvu 和微軟文檔:

LocalSystem 帳戶是服務控制管理器使用的預定義本地帳戶。 它在本地計算機上具有廣泛的權限,並充當網絡上的計算機。

如果您的共享文件夾位於域中的計算機上,則您可以將完全權限授予客戶端計算機,盡管將其授予所有人。

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM