代码之家  ›  专栏  ›  技术社区  ›  bmm6o

在WiX安装中从C#自定义操作调用PowerShell命令

  •  1
  • bmm6o  · 技术社区  · 14 年前

    背景: 我正在为SharePoint组件编写安装程序。除了把软件放到目标机器上,我还想正确地配置它。SharePoint(特别是2010)通过PowerShell公开其管理功能。因此,我编写了一个C#自定义操作来调用一系列命令,如下所示:

    Runspace runSpace = RunspaceFactory.CreateRunspace();
    runSpace.Open();
    Pipeline pipeline = runSpace.CreatePipeline();
    
    Command addSnapin = new Command("Add-PSSnapin");
    addSnapin.Parameters.Add("Name", "Microsoft.SharePoint.Powershell");
    pipeline.Commands.Add(addSnapin);
    pipeline.Invoke();
    
    Command getSearchApp = new Command("Get-SPEnterpriseSearchServiceApplication");
    pipeline = runSpace.CreatePipeline();
    pipeline.Commands.Add(getSearchApp);
    
    Object searchApp = pipeline.Invoke().First().BaseObject;
    /* pass searchApp to other PS cmdlets */
    

    问题: Add-PSSnapin 命令(据我所知,它成功了)。

    为什么PS找不到函数,当相同的命令序列在PS控制台中工作时,以及在我的测试程序中运行时? 这个过程有没有更简单的方法?WiX似乎不太支持复杂的PS定制操作(虽然我的操作不是很复杂,但它不是一行程序)。

    1 回复  |  直到 10 年前
        1
  •  3
  •   bmm6o    14 年前

    在这种情况下,管理单元无法加载,因为自定义操作作为32位进程运行。我更改了构建设置,将其编译为x64,它开始工作。Keith的建议很有帮助(+1)-我假设失败会导致抛出异常,但事实并非如此。