2017-08-10 13 views
1

私はEXEからトリガーしたいpowershellスクリプトを持っています。C#コードからPS1ファイルをトリガーします。 C#コードはexeでラップする必要があります

物事すでに試したか行うことはできません。

  • は、プロセスが、それはexeファイルではなくPowerShellを期待している実行しているので、直接PowerShellを実行することはできません。
  • Powershellスクリプトはかなり複雑なので、C#に移植するのは簡単ではなく、非常に時間がかかるでしょう。
  • PS2EXEは動作しますが、セキュリティポリシーのために使用できません。
  • ps1ファイルのexeファイルを作成する方法をGoogleに試しましたが、解決策が見つかりませんでした(ps2exeは除く)。だから私はC#を使ってps1を実行しようと決めてから、exeファイルを作成します。その後、exeとpowershellを同じmsiでラップします。
単にプロセスを作成し、それを起動することによって試み

:コード上

 Process p = new Process(); 
     p.StartInfo = new ProcessStartInfo("powershell.exe"); 
     p.StartInfo.Arguments = @"-Executionpolicy unrestricted C:\script\ms.ps1"; 
     p.StartInfo.CreateNoWindow = true; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     p.Start(); 

しかし、それはミリ秒程度黒CMDウィンドウを点滅し、動作しています。ソースから

しようとしました次のコード:https://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C

 string scriptText = System.IO.File.ReadAllText(@"C:\script\ms.ps1"); 
     Runspace runspace = RunspaceFactory.CreateRunspace(); 
     runspace.Open(); 
     Pipeline pipeline = runspace.CreatePipeline(); 
     pipeline.Commands.AddScript(scriptText); 

     pipeline.Commands.Add("Out-String"); 

     pipeline.Invoke(); 
     runspace.Close(); 

同じ問題上記のように、数秒間黒画面を点滅。

次のいずれかの質問に回答すると、私の問題を解決することができますか?

  1. PS2EXEを使用せずにpowershell用のexeファイルを作成するにはどうすればよいですか?
  2. C#コードからpowershellを起動するときに、ウィンドウポップアップを無効にする方法はありますか?
  3. 問題を解決する方法は他にありますか?

- おかげ

+0

あなたは[CreateNoWindow](https://stackoverflow.com/questions/3497924/console-window-still-popping-up-even-after-processwindowstyle-を試してみました隠された)? – Martheen

+0

PowerShellを呼び出すときに引数に隠された-windowstyleを追加します。 –

+1

Ps2Exeアプリケーションではなく、自宅のC#アプリケーションを実行するセキュリティポリシーの種類は何ですか? – vonPryz

答えて

0

こんにちは!代わりに

enter image description here コンソールの多分それはこのためにあなたを助けるプロジェクトのプロパティで「Windowsアプリケーション」を選択することができます。また、スクリプトを実行しているwhithoutのコマンドを実行することができます/黒CMDウィンドウを点滅/

を( 次のようなもの):

string MyCommand = "-Command &{ if (!(Test-Path 'c:\\test')) {md 'c:\\test'; get-process | Out-File c:\\test\\MyFile.txt}}"; 

      ProcessStartInfo MyProcInfo = new ProcessStartInfo(); 


      MyProcInfo.FileName = "powershell.exe"; 
      MyProcInfo.Arguments = MyCommand; 

      Process MyProcess = new Process(); 
      MyProcess.StartInfo = MyProcInfo; 
      MyProcess.Start(); 
      MyProcess.WaitForExit(); 
関連する問題