-1

Form1で私はこれをしました:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;



namespace test
{
    public partial class Form1 : Form
    {

        WindowsFormsApplication1.Form1 f1;

        public Form1()
        {
            InitializeComponent();


                    MessageBox.Show("Oops something went wrong sorry");
                    f1 = new WindowsFormsApplication1.Form1();



        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

ここで、f1は私が追加した2番目のプロジェクトです。

ここで、seocndプロジェクトを参照として追加しました。

2番目のプロジェクトで私はしました:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Diagnostics;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        string[] hardDrivedInfo;
        string applicationFileName; 

        public Form1()
        {
            InitializeComponent();

            applicationFileName = Path.GetDirectoryName(Application.ExecutablePath);

しかし、applicatioFileNameは、最初のプロジェクトのexeファイルのパスを表示しますが、ディレクトリにある2番目のプロジェクトのディレクトリ+ファイル名を取得する必要があります。D:\C-Sharp\test\test\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

最初のプロジェクトのディレクトリは次のとおりです。D:\C-Sharp\test\test\test\bin\Debug\test.exe

しかし、applicationFileNameに次のように表示させる必要があります。D:\C-Sharp\test\test\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

編集 **

私がやりたいのは、最初のメインプロジェクトを実行し、メッセージボックスがポップアップして閉じた後、2番目のプロジェクトを実行して2番目のプロジェクトのexeファイルをD:などの別の場所にコピーし、2番目のexeファイルを実行することです事業。したがって、最初のプロジェクトexeファイルを削除すると、D:の2番目のファイルが実行され続けます。

4

2 に答える 2

1

あなたは使用してみることができます

string file = typeof(Form1).Assembly.Location;

詳細については、次を参照Assembly.Locationしてください。

マニフェストを含む読み込まれたファイルの場所。ロードされたファイルがシャドウ コピーされた場合、場所はシャドウ コピーされた後のファイルの場所です。Load(Byte[]) メソッドのオーバーロードを使用する場合など、アセンブリがバイト配列から読み込まれる場合、返される値は空の文字列 ("") です。

于 2012-05-29T18:25:26.133 に答える
0

あなたのテキストは少し不明瞭ですが、プロセスを開始したアセンブリではなく、参照されたアセンブリの名前を取得しようとしていると思いますよね?

を使用してみてくださいAssembly.GetExecutingAssembly()。次に、プロパティからフルパスを取得できLocationます。

于 2012-05-29T18:24:32.050 に答える