2012-05-29 2 views
-1

편집 내가 이런 짓을 :두 번째로 추가 된 프로젝트의 EXE 파일 이름은 어떻게 얻습니까? Form1에에서

F1 내가 방금 추가 한 두 번째 프로젝트입니다
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) 
     { 

     } 
    } 
} 

.

이제 seocnd 프로젝트를 참조로 추가했습니다. 두 번째 내가 한 프로젝트에서

: 내가 느릅 나무에있는 두 번째 프로젝트의 디렉토리 + 파일 이름을 얻을 필요가있는 동안

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 파일의 경로를 보여 디렉토리 : D:\C-Sharp\test\test\test\bin\Debug\test.exe

하지만 난 applicationFileName가 표시됩니다 있는지 확인해야합니다 : D:\C-Sharp\test\test\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

첫 번째 프로젝트의 디렉토리입니다 D:\C-Sharp\test\test\WindowsFormsApplication1\bin\Debug\WindowsFormsApplication1.exe

,451,515,

편집 **

내가 뭘 원하는 것은 메시지 박스가 팝업 후 다음 첫 번째 주요 프로젝트를 실행하고 나는 그것이 D와 같은 다른 위치로 두 번째 프로젝트 exe 파일을 복사합니다 두 번째 프로젝트를 실행합니다 닫습니다 : 두 번째 프로젝트의 exe 파일을 실행합니다. 그래서 만약 내가 첫 번째 프로젝트 exe 파일을 삭제하면 두 번째 D :는 계속 실행됩니다.

+0

하나의 실행 파일이 다른 실행 파일을 참조하는 이유는 무엇입니까? 공유해야하는 코드가 있으면 해당 코드를 클래스 라이브러리에 추출해야하며 두 응용 프로그램 모두 해당 라이브러리를 참조해야합니다. 서로를 참조하는 응용 프로그램은 직관적이지 않고 지저분합니다 (사용자가 발견 한 것처럼). – David

+0

@user .... 당신이 원하는 것이 불분명합니다. 당신은 당신이 원하는 것을 말하고 있습니까? applicationFileName은 두 프로젝트에서 D : \ C-Sharp \ test \ test \ WindowsFormsApplication1 \ bin \ Debug \ WindowsFormsApplication1.exe 을 보여줄 것입니까? – MikeTWebb

+0

MikeTWebb 아니요 두 번째 프로젝트에서 전체 경로가있는 두 번째 프로젝트의 실행 가능한 파일 이름 만 가져 오려고합니다. 다른 말로하면 두 번째 프로젝트 실행 파일 이름을 다른 하드 드라이브 (예 : D :)에 복사 한 다음 D :에서이 exe 파일을 실행하고 첫 번째 프로젝트의 EXE를 닫거나 삭제해도 두 번째 프로젝트가 계속 실행됩니다. . – user1363119

답변

0

텍스트가 약간 불투명하지만, 의 이름을 얻으려는 것 같습니다. 바로 프로세스를 시작한 것보다 어셈블리를 참조 했습니까?

Assembly.GetExecutingAssembly()을 사용해보세요. 그런 다음 Location 속성에서 전체 경로를 가져올 수 있습니다.

+0

Avner는 프로세스를 시작한 파일이 아닌 두 번째 프로젝트의 참조 가능한 파일 이름을 얻으려고합니다. 그래서 당신의 아이디어를 시도했지만 모든 속성을 찾지 못했습니다 : GetExecutingAssembly() assembly. 나는했다 : 시스템을 사용하라.반사; 나는 assembly1을했다. 그 다음 나는 assembly1을했다. 하지만 GetExecutingAssembly()가 없습니다. 문제는 아마도 vs2010 pro와 .net 4.0을 사용하고있는 것일 수 있습니다. – user1363119

+0

'GetExecutingAssembly'는 정적 메소드이므로,'Assembly' 타입 자체에서 호출합니다. 변수를 정의 할 필요가 없습니다. –

1

당신은

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

자세한 내용은 Assembly.Location를 참조하여 시도해 볼 수도 있습니다 :

매니페스트가 들어있는로드 된 파일의 위치를. 로드 된 파일이 섀도 복사 된 경우 섀도 복사본 된 후에 파일의 위치가됩니다. Load (Byte []) 메서드 오버로드를 사용할 때와 같이 어셈블리가 바이트 배열에서로드 된 경우 반환되는 값은 빈 문자열 ("")입니다.

+0

위치 속성을 시도해도 제대로 작동하지 않았습니다. 어떤 이유로 두 번째 프로젝트가 끝날 때 경로가있는 첫 번째 프로젝트 경로를 보여주었습니다. – user1363119

+0

@ user1363119 : 어셈블리가로드 된 곳입니다. 빌드 프로세스의 일부로 복사되지만로드 된 파일을 보여줍니다. 파일이 원래 복사 된 위치를 알기를 기대하는 것을 볼 수 없습니다. –

관련 문제