none
請問一個將參數傳給 VB.NET 執行檔的錯誤 RRS feed

  • 問題

  • 希望能將參數傳給 VB.NET 的執行檔
    查了一些資料提到用 Environment.GetCommandLineArgs 去讀取傳入的參數

    程式如下 , 直接寫在 Form1_Load 內

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

            Dim s() As String
            s = Environment.GetCommandLineArgs
            MessageBox.Show("s1 : " + s(1) + "s2 : " + s(2))
    End Sub

    但卻出現以下錯誤 ,

    以下是我 DIR 該資料夾的檔案 , 確實有此些檔案


    想請教各位高手, 
    我對此種用法的認知有誤嗎 ?
    問題出在那裡 ? 謝謝

    2015年9月3日 上午 06:40

解答

  • 那你試試寫在 Program.cs 內呢?

                

    static class Program
        {
            /// <summary>
            /// 應用程式的主要進入點。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                //寫你的程式碼 
        

                //將下面這行註解 , 就不會show form 視窗 , 但仍然可顯示 MessageBox.

                //Application.Run(new Form1());
            }
        }

    • 已標示為解答 MIS110 2015年9月4日 上午 05:31
    2015年9月4日 上午 02:00
  • 您好,

    請問如果不要顯示Form的話,有考慮使用 Console 程式嗎?

    您寫在 Form_Load的程式,寫在 Module 的 main sub 中一樣可以work哦!

    如果一定需要那個form的話,

    您可以新增一個Module,新增main function,

    然後將程式轉成 Console 程式,設定啟動物件設定成 main ,

    然後再去叫form的某個Method,如下

    Form中您要執行的Sub

    Public Sub FormOtherTask()
            Dim s() As String
            s = Environment.GetCommandLineArgs
            MessageBox.Show("s1 : " + s(1) + "s2 : " + s(2))
            MsgBox("do other...task")
    End Sub

    Module Module1
        Sub Main()
           
            Dim form1 As Form1 = New Form1
            form1.FormOtherTask()

        End Sub
    End Module


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 MIS110 2015年9月4日 上午 05:29
    2015年9月4日 上午 02:12

所有回覆

  • 那試試看用絕對路徑呢 ? 像是 C:\..\...\test.xls
    2015年9月3日 上午 07:07
  • 看你的錯誤訊息是寫找不到 1041.xls 檔。

    確認一下你 test.exe 執行檔下也有 1041.xls、Book2.xls 檔?

    如果是 test.exe 執行檔 與 1041.xls、Book2.xls 是不同路徑,那麼就給 絕對路徑 試試?

    還有你只是要在 命令提示 傳參數,為何不直接開 Console Application 專案,寫在內?

    2015年9月3日 上午 08:33
  • 那試試看用絕對路徑呢 ? 像是 C:\..\...\test.xls

    謝謝您的指導

    這樣確實已經沒有錯誤訊息了 , 可是不會執行 messagebox.show 的部份


    • 已編輯 MIS110 2015年9月3日 上午 08:48
    2015年9月3日 上午 08:41
  • 看你的錯誤訊息是寫找不到 1041.xls 檔。

    確認一下你 test.exe 執行檔下也有 1041.xls、Book2.xls 檔?

    如果是 test.exe 執行檔 與 1041.xls、Book2.xls 是不同路徑,那麼就給 絕對路徑 試試?

    還有你只是要在 命令提示 傳參數,為何不直接開 Console Application 專案,寫在內?

    謝謝您的回覆

    請看我之前的貼圖 , test.exe 下是有 1041.xls , Book2.xls 的

    不直接開 console Application 是因後續還有一些作業 , 這個例子只是先用來測是否傳得進來

    2015年9月3日 上午 08:47
  • 用除錯器下中斷點去看路徑對不對,你傳入的資料不對就算檔案放在那一百萬年你還是抓不到。

    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2015年9月3日 上午 08:57
    版主
  • 您好,

    您的錯誤應該不是發生在 MessageBox.Show 吧!

    感覺是取得參數值要去針對檔案作處理才發生錯誤的哦!

    您可以在IDE的偵錯Tab裡面輸入那些參數,然後測試看錯在那一行哦! 如下,


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2015年9月3日 上午 09:36
  • 感謝亂馬客的指導,  

    之前我是有在程式中下中斷點 , 但若在 cmd 下直接下參數 , 是進不去中斷點 ,

    感謝亂馬客教導此種參數輸入方式 , 可以執行到並顯示 messagebox.show 的訊息

    確實如亂馬客所懷疑是取得參數值要去針對檔案作處理才發生錯誤

    想再請教一下大家, 我是將接收參數及處理的程式寫在 Form1_Load 內 , 

    希望在 form load 時執行一些功能 , 但不希望會出現 form 的畫面

    所以想於form 的畫面後就用程式直接將 form 畫面關掉 ,  

    可是在執行到某個宣告(含指定值給宣告的物件)該敘述後 , form 的畫面就自動跳出來了

    此時還在 form load 內 , 所以沒辦法做到我想要的功能, 

    請問若想做到這樣的功能會建議用什麼方法 , 謝謝

    2015年9月4日 上午 01:28
  • 那你試試寫在 Program.cs 內呢?

                

    static class Program
        {
            /// <summary>
            /// 應用程式的主要進入點。
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);

                //寫你的程式碼 
        

                //將下面這行註解 , 就不會show form 視窗 , 但仍然可顯示 MessageBox.

                //Application.Run(new Form1());
            }
        }

    • 已標示為解答 MIS110 2015年9月4日 上午 05:31
    2015年9月4日 上午 02:00
  • 您好,

    請問如果不要顯示Form的話,有考慮使用 Console 程式嗎?

    您寫在 Form_Load的程式,寫在 Module 的 main sub 中一樣可以work哦!

    如果一定需要那個form的話,

    您可以新增一個Module,新增main function,

    然後將程式轉成 Console 程式,設定啟動物件設定成 main ,

    然後再去叫form的某個Method,如下

    Form中您要執行的Sub

    Public Sub FormOtherTask()
            Dim s() As String
            s = Environment.GetCommandLineArgs
            MessageBox.Show("s1 : " + s(1) + "s2 : " + s(2))
            MsgBox("do other...task")
    End Sub

    Module Module1
        Sub Main()
           
            Dim form1 As Form1 = New Form1
            form1.FormOtherTask()

        End Sub
    End Module


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    • 已標示為解答 MIS110 2015年9月4日 上午 05:29
    2015年9月4日 上午 02:12
  • 謝謝大家的幫忙

    weipxf 及亂馬客提供的程式 , 測試後已經得到要做到的功能了

    不知為什麼也確定必需使用絕對路徑

    2015年9月4日 上午 05:35
  • 你有工作路徑的觀念嗎?

    相對路徑不是針對執行檔所在的路徑,而是針對工作路徑。

    路徑預設是啟動程式的路徑,但可以修改。

    例如你在:

    ...\Debug > test1.exe

    則預設工作路徑是

    ...\Debug

    你的檔案是在 \Debug 目錄還是專案目錄?


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2015年9月4日 上午 08:46