gpt4 book ai didi

c# - 使用安装项目将文件复制到远程服务器

转载 作者:行者123 更新时间:2023-11-30 12:34:48 35 4
gpt4 key购买 nike

我正在尝试创建一个安装包,它不仅可以安装我们的应用程序,还可以将文件复制到远程应用程序服务器并在那里安装服务。我以为我会覆盖自定义操作中的安装方法,让它启动一个 powershell 脚本来复制文件。不幸的是,当代码调用 powershell 脚本时,我得到了这个 CmdletProviderInvocationException:

The system detected a possible attempt to compromise security. Please ensure that you can contact the server that authenticated you.

我能够将我用来调用 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

最佳答案

将文件复制到网络位置有两个主要要求:

  • 您的自定义操作应该运行 without impersonation
  • 网络位置应该对每个人都有完全权限

MSI 安装在本地系统帐户下运行。所以有没有权限都无所谓。

由于从网络机器上授予 SYSTEM 帐户权限并不容易,因此最简单的方法是将完全权限授予 Everyone。这需要在包含共享文件夹的机器上完成。

关于c# - 使用安装项目将文件复制到远程服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6741056/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com