none
我該如何讀取自己的名字呢? RRS feed

  • 問題

  • 例如我編譯了A.exe 執行後顯示 msgbox A.exe

    但如果使用者手動改成 B.exe 這樣在執行後 會顯示 B.exe

    我不知道我形容的正不正確

    找了很久 似乎都沒有這樣的作法 >"<

    這樣說好了 我想讀取 目前執行的檔名 >"<


    0.0
    2011年7月17日 上午 09:43

解答

  • 我想你的困擾在於

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase <--這麼一大串的點, 所以搞不清楚怎麼查才好

    這和數學運算差不多, 由左而右看

    (1) System.Reflection 這是個命名空間 (name space) 應該沒有問題

    (2) Assembly 類別 隸屬在System.Reflection這個命名空間, 另一個說法就是 System.Reflection命名空間中有一個 Assembly類別, 我想這應該也不是問題

    (3) GetExecutingAssembly() 是Assembly類別的一個靜態方法. 而它的回傳值是個 Assembly 類別的執行個體, 意義則是 取得組件,其中含有目前正在執行的程式碼

    (1) (2)(3) 代表了當你執行了 System.Reflection.Assembly.GetExecutingAssembly() 你會取得一個Assembly 類別的執行個體, 而這執行個體包含的資訊就是你執行這行程式的組件(Assembly)本身

    (4) GetName(), 既然到(3)取得的物件是 Assembly類別的執行個體, 那代表 這個GetName() 方法是Assembly類別的方法, 所以再MSDN中就是 Assembly.GetName 方法 , 那它的回傳值又是何物 ? MSDN中記載

     

    傳回值

    型別:System.Reflection.AssemblyName

     

    功能則是 取得這個組件的 AssemblyName

    (5) 所以 CodeBase 是什麼 ? 依據(4)的結果, 它一定是隸屬於 System.Reflection.AssemblyName 類別的某個東西, 根據查表 (MSDN文件) 得知它就是 AssemblyName.CodeBase 屬性 , 功能是 取得或設定做為 URL 之組件的位置。, 而這屬性的型別則是String

    所以這程式其實如果拆開寫, 你就比較容易懂 

    ex:

    Dim myAsm as System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

    Dim myAsmName as System.Reflection.AssemblyName= myAsm.GetName()

    Dim result as string = myAsmName.CodeBase

    這樣你可有瞭解了 ?


     

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年7月17日 下午 04:58
    版主
  •   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim filename As String
        filename = System.IO.Path.GetFileName( _
          System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
        MessageBox.Show(filename)
    
    
      End Sub

    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年7月17日 上午 10:17

所有回覆

  •   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim filename As String
        filename = System.IO.Path.GetFileName( _
          System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
        MessageBox.Show(filename)
    
    
      End Sub

    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年7月17日 上午 10:17
  • 你是要顯示 組件的名稱 還是 目前執行的檔案名稱?
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年7月17日 下午 01:12
  • Hi,

    這是你要的嗎?

    Application.ExecutablePath 屬性

    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.application.executablepath(v=vs.80).aspx


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2011年7月17日 下午 01:23
  • 一般預設為 WindowsApplication1.vbproj 然後編譯後 會有 WindowsApplication1.exe

    我想按了BUTTON後顯示 WindowsApplication1.exe

    然後要是我把 WindowsApplication1.exe 改成 B.exe 在打開

    則會出現 B.exe ^^


    0.0
    2011年7月17日 下午 01:32
  •  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      Dim filename As String
      filename = System.IO.Path.GetFileName( _
       System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
      MessageBox.Show(filename)
    
    
     End Sub
    

    Shadowと愉快なコード達
    Please correct me if my concept is wrong


    SHADOW 先進:

    我想深入了解您的程式碼的意思 是否可以請教

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

    的中文意思呢 ^^?


    0.0
    2011年7月17日 下午 01:35
  • 系統.反射.組件.取得執行中組件().取名稱().程式碼位置 ....


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure
    2011年7月17日 下午 01:47
    版主

  •  

    我想深入了解您的程式碼的意思 是否可以請教

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

    的中文意思呢 ^^?

    我覺得, 你應該先就這個資訊去查查MSDN文件庫, 想一想, 再問會比較好.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年7月17日 下午 01:55
    版主

  •  

    我想深入了解您的程式碼的意思 是否可以請教

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

    的中文意思呢 ^^?

    我覺得, 你應該先就這個資訊去查查MSDN文件庫, 想一想, 再問會比較好.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    恩 了解了

    因為我在MSDN查到的是 確定執行的應用程序路徑(http://msdn.microsoft.com/en-us/library/aa457089.aspx)....

    所以才想請教一下組合含意...

    SORRY摟...好像造成大家困擾


    0.0
    2011年7月17日 下午 02:27
  • 系統.反射.組件.取得執行中組件().取名稱().程式碼位置 ....


    這可以解釋為翻譯幽默嗎...

    ^_^


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年7月17日 下午 02:38

  • 恩 了解了

    因為我在MSDN查到的是 確定執行的應用程序路徑(http://msdn.microsoft.com/en-us/library/aa457089.aspx)....

    所以才想請教一下組合含意...

    SORRY摟...好像造成大家困擾


    0.0
    這不是困擾, 而是我們也想知道你自個兒已經查到哪個程度, 而我們該從哪邊接手, 而你的問法基本上就很難表示出真正的狀況.
    這也就是為什麼我很少一開始就丟程式碼的原因,當然我知道如果我直接給程式碼很快就可以獲得點數 , 不過點數對我來講一直都不是最重要的事, 原因是我個人覺得這樣對發問者的幫助不大, 反而變成一種速成的九陰白骨爪, 當然這只是我個人的習慣, 別人和我想法不同很正常, 我也無權干涉別人怎麼做.但當我回覆之時, 我就會希望得知發問者目前瞭解到什麼程度, 進行過什麼努力.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。



    2011年7月17日 下午 02:49
    版主
  • SHADOW 先進:

    我想深入了解您的程式碼的意思 是否可以請教

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase

    的中文意思呢 ^^?


    0.0
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Dim path As String
     path = System.IO.Path.GetDirectoryName( _
     System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
     MessageBox.Show(path)
    
    End Sub
    



    上面是MSDN的範例程式碼,把GetDirectoryName改成GetFileName就是答案了。

     


    Shadowと愉快なコード達
    Please correct me if my concept is wrong
    2011年7月17日 下午 03:01
  • 我想你的困擾在於

    System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase <--這麼一大串的點, 所以搞不清楚怎麼查才好

    這和數學運算差不多, 由左而右看

    (1) System.Reflection 這是個命名空間 (name space) 應該沒有問題

    (2) Assembly 類別 隸屬在System.Reflection這個命名空間, 另一個說法就是 System.Reflection命名空間中有一個 Assembly類別, 我想這應該也不是問題

    (3) GetExecutingAssembly() 是Assembly類別的一個靜態方法. 而它的回傳值是個 Assembly 類別的執行個體, 意義則是 取得組件,其中含有目前正在執行的程式碼

    (1) (2)(3) 代表了當你執行了 System.Reflection.Assembly.GetExecutingAssembly() 你會取得一個Assembly 類別的執行個體, 而這執行個體包含的資訊就是你執行這行程式的組件(Assembly)本身

    (4) GetName(), 既然到(3)取得的物件是 Assembly類別的執行個體, 那代表 這個GetName() 方法是Assembly類別的方法, 所以再MSDN中就是 Assembly.GetName 方法 , 那它的回傳值又是何物 ? MSDN中記載

     

    傳回值

    型別:System.Reflection.AssemblyName

     

    功能則是 取得這個組件的 AssemblyName

    (5) 所以 CodeBase 是什麼 ? 依據(4)的結果, 它一定是隸屬於 System.Reflection.AssemblyName 類別的某個東西, 根據查表 (MSDN文件) 得知它就是 AssemblyName.CodeBase 屬性 , 功能是 取得或設定做為 URL 之組件的位置。, 而這屬性的型別則是String

    所以這程式其實如果拆開寫, 你就比較容易懂 

    ex:

    Dim myAsm as System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()

    Dim myAsmName as System.Reflection.AssemblyName= myAsm.GetName()

    Dim result as string = myAsmName.CodeBase

    這樣你可有瞭解了 ?


     

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2011年7月17日 下午 04:58
    版主
  • 感謝BILL先進的耐心指導

    真的很謝謝您

    也讓我多學了一課與邏輯

    感謝


    0.0
    2011年7月18日 上午 07:02