Windows 服务中的 PowerShell Nuget 包错误

问题描述 投票:0回答:1

我是一名从事 Windows 服务工作的 .net 开发人员,我遇到了问题,希望有人可以提供帮助。下面详细介绍了我们正在合作的内容。

  • 具有 .NET 6 目标框架的 Windows 服务
  • 我们在版本 7.2.13 上使用 System.Management.Automation 和 Microsoft.PowerShell.SDK NuGet 包 (这是支持 .NET 6 的最新版本)
  • 这是代码行:var results = script.Invoke();脚本是带有我们的命令和参数的 powershell 对象
  • 我们尝试更新到 .NET 7 以获取最新的 .NET Powershell 包,但无法访问 Windows.Management.Deployment.PackageManager,我们正在将其用于代码库的另一部分

script.Invoke 上抛出错误。对于上下文,这是调用它的方法:

private void RunPcsScript(string pcsServiceName, string newestVersion, string pcsPath)
        {
            _logger.Info("Creating Powershell");
            using var ps = PowerShell.Create();
            if (!string.IsNullOrEmpty(pcsServiceName))
            {
                _logger.Info("Removing old PCS Service");
                IDictionary removeParams = new Dictionary<String, String>();
                removeParams.Add("Name", pcsServiceName);
                ps.AddCommand("Remove-Service").AddParameters(removeParams).Invoke();
            }
            _logger.Info("Creating new PCS Service");
            IDictionary parameters = new Dictionary<String, String>();
            parameters.Add("BinaryPathName", $"{pcsPath}\\SomeExecutable.exe");
            parameters.Add("DisplayName", "MyServiceName");
            parameters.Add("Name", $"MyServiceName-{newestVersion}");
            var script = ps.AddCommand("New-Service").AddParameters(parameters);
            var results = script.Invoke();
        }
  • 这在本地工作正常,但是当部署到另一台 Windows 10 计算机时,我们收到此错误 我已经提供了下面的错误日志
System.TypeInitializationException: The type initializer for 'System.Management.Automation.ExperimentalFeature' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'System.Management.Automation.Configuration.PowerShellConfig' threw an exception.
 ---> System.ArgumentNullException: Value cannot be null. (Parameter 'path1')
   at System.IO.Path.Combine(String path1, String path2)
   at System.Management.Automation.Configuration.PowerShellConfig..ctor()
   at System.Management.Automation.Configuration.PowerShellConfig..cctor()
   --- End of inner exception stack trace ---
   at System.Management.Automation.ExperimentalFeature..cctor()
   --- End of inner exception stack trace ---
   at System.Management.Automation.Runspaces.InitialSessionState.AddVariables(IEnumerable`1 variables)
   at System.Management.Automation.Runspaces.InitialSessionState.CreateDefault()
   at System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(PSHost host)
   at System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace()
   at System.Management.Automation.PowerShell.Worker.CreateRunspaceIfNeededAndDoWork(Runspace rsToUse, Boolean isSync)
   at System.Management.Automation.PowerShell.CoreInvokeHelper[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.CoreInvoke[TInput,TOutput](PSDataCollection`1 input, PSDataCollection`1 output, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.Invoke(IEnumerable input, PSInvocationSettings settings)
   at System.Management.Automation.PowerShell.Invoke()

另外,如果有人知道参数“Path1”是什么,如果有人有任何建议,我很想听听他们

上面列出的所有内容以及值得注意的是我们正在使用设置进行发布

  • 发布|任何CPU
  • 目标框架net6.0-windows10.0.17763.0
  • 自给自足
  • win-x64 生成单个文件是发布选项检查的唯一选项

我们期望与本地设备上的结果相同。我们的脚本执行时没有错误。

c# .net powershell visual-studio service
1个回答
0
投票

听起来“自包含”是问题所在,请参阅:https://github.com/PowerShell/PowerShell/issues/13540

© www.soinside.com 2019 - 2024. All rights reserved.