Возникли проблемы с Powershell ConsoleShell.Start - PullRequest
1 голос
/ 28 июля 2010

Запуск следующего кода, приводящего к HostException:

  Public Sub RunPowershellInConsole(ByVal scriptText As String)
    Dim config = RunspaceConfiguration.Create
    Dim args() As String = New String() {scriptText}

    ConsoleShell.Start(config, "Windows PowerShell", "", args)
  End Sub

.

System.Management.Automation.Host.HostException was unhandled
  Message=The Win32 internal error "The handle is invalid" 0x6 occurred when retrieving handle for active console output buffer. Contact Microsoft Support Services.
  Source=Microsoft.PowerShell.ConsoleHost
  WasThrownFromThrowStatement=False
  StackTrace:
       at Microsoft.PowerShell.ConsoleControl.GetActiveScreenBufferHandle()
       at Microsoft.PowerShell.ConsoleHostRawUserInterface.GetBufferInfo(CONSOLE_SCREEN_BUFFER_INFO& bufferInfo)
       at Microsoft.PowerShell.ConsoleHostRawUserInterface.get_ForegroundColor()
       at Microsoft.PowerShell.ConsoleHostRawUserInterface..ctor(ConsoleHostUserInterface mshConsole)
       at Microsoft.PowerShell.ConsoleHostUserInterface..ctor(ConsoleHost parent)
       at Microsoft.PowerShell.ConsoleHost..ctor(RunspaceConfiguration configuration)
       at Microsoft.PowerShell.ConsoleHost.CreateSingletonInstance(RunspaceConfiguration configuration)
       at Microsoft.PowerShell.ConsoleHost.Start(RunspaceConfiguration configuration, String bannerText, String helpText, String preStartWarning, String[] args)
       at Microsoft.PowerShell.ConsoleShell.Start(RunspaceConfiguration configuration, String bannerText, String helpText, String preStartWarning, String[] args)
       at Microsoft.PowerShell.ConsoleShell.Start(RunspaceConfiguration configuration, String bannerText, String helpText, String[] args)
       at MyApp.Barry.Bosely.RunPowershell.RunPowershellInConsole(String scriptText) in C:\Dev\MiscProjects\GordonB\Barry\Barry.Bosely\RunPowershell.vb:line 87
       at MyApp.Barry.Bosely.frmMain.TEstToolStripMenuItem_Click(Object sender, EventArgs e) in C:\Dev\MiscProjects\GordonB\Barry\Barry.Bosely\frmMain.vb:line 119
       at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
       at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
       at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
       at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
       at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
       at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ToolStrip.WndProc(Message& m)
       at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at MyApp.Barry.Bosely.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.ComponentModel.Win32Exception
       ErrorCode=-2147467259
       Message=The handle is invalid
       NativeErrorCode=6
       InnerException: 

Немного помогите кому-нибудь?

1 Ответ

1 голос
/ 28 июля 2010

Я только что попробовал этот код в моем Консольном приложении , и он заработал:

using System.Management.Automation.Runspaces;
using Microsoft.PowerShell;

namespace TryConsoleShell
{
    class Program
    {
        static void Main(string[] args)
        {
            var config = RunspaceConfiguration.Create();
            ConsoleShell.Start(config, "Windows PowerShell", "help text", new string[] { "-noexit", "ls" });
        }
    }
}

Я полагаю, ваше приложение Приложение Windows , и этот сценарий либо вообще не поддерживается, либо вам все еще нужно иметь доступное окно консоли (я еще не пробовал этот способ).

EDIT:

Это работало и в приложении WinForm. Но окно консоли все еще необходимо для хоста консоли. Чтобы сделать окно консоли доступным, просто измените тип вывода проекта на Консольное приложение .

using System;
using System.Management.Automation.Runspaces;
using System.Windows.Forms;
using Microsoft.PowerShell;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var config = RunspaceConfiguration.Create();
            ConsoleShell.Start(config, "Windows PowerShell", "help text", new string[] { "-noexit", "ls" });
        }
    }
}

P.S. Я никогда не видел применения этого сценария на практике и даже не знал, что он действительно работает. Есть ли практически полезные приложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...