PowerShell のコマンドウインドウで実行すると、2回目以降がエラーになるので、powershell に引数を渡して(バッチファイル)実行させています。 バッチ処理で、どうしても複雑な入力パラメータが必要な時に使えると思います。 関連する記事 C# を PowerShell で実行 : メッセージボックスの応答結果をファイルに書き込む ( バッチファイルで利用可能 ) form1.ps1
$code = @" using System; using System.IO; using System.Windows.Forms; public class MyClass { // ▼ これは無くても動作する [STAThread] public static void Main() { // テンプレート部分( 最初から記述されている ) Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // Form1 の作成 Application.Run(new Form1()); } // Form1 クラス private class Form1 : Form { // コンストラクタ public Form1() { InitializeComponent(); } // 画面作成( デザイナが作成したもの ) private void InitializeComponent() { this.textBox1 = new System.Windows.Forms.TextBox(); this.button1 = new System.Windows.Forms.Button(); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(47, 49); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(191, 19); this.textBox1.TabIndex = 0; // // button1 // this.button1.Location = new System.Drawing.Point(274, 47); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(75, 23); this.button1.TabIndex = 1; this.button1.Text = "実行"; this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); //this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(400, 150); this.Controls.Add(this.button1); this.Controls.Add(this.textBox1); this.Text = "フォームのタイトル"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; } // ボタンをクリックした時のイベント private void button1_Click(object sender, EventArgs e) { Console.WriteLine("button1_Click"); // テンポラリフォルダのパスを取得 string path = Environment.GetEnvironmentVariable("temp"); // 書き込むファイルのフルパスを編集する string writePath = string.Format( @"{0}\_input_result", path ); using (StreamWriter sw = new StreamWriter(writePath, false)) { // 書き込み sw.Write( textBox1.Text ); // ファイルを閉じます sw.Close(); } // アプリケーション終了 Application.Exit(); } // コントロール用変数 private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; } } "@ Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies ("System.Windows.Forms","System.Drawing") [MyClass]::Main()
form1.bat
@powershell -NoProfile -ExecutionPolicy Unrestricted "./form1.ps1"