Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > .NET Framework > Forum > Process.Start() อยากรันโปรแกรมในโหมดเงียบ หรือไม่โชว์อะไรขึ้นมาเลยครับ



 

Process.Start() อยากรันโปรแกรมในโหมดเงียบ หรือไม่โชว์อะไรขึ้นมาเลยครับ

 



Topic : 132879



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook



Code (C#)
public static bool ExecuteApplication(string Address, string arguments, bool showWindow = true)
        {
            Process proc = new Process();
            proc.StartInfo.FileName = Address;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.CreateNoWindow = showWindow;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.UseShellExecute = false;
            return proc.Start();
        }


อยากรันแบบไม่ต้องให้มันเด้งขึ้นมาครับ ให้ทำงานใน taskbar เงียบๆก็พอ

ลองตั้ง WindowStyle = ProcessWindowStyle.Hidden ก็ยังเด้งขึ้นมาเหมือนเดิม



Tag : .NET, Win (Windows App), C#







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2019-01-09 09:50:08 By : lamaka.tor View : 2625 Reply : 15
 

 

No. 1



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


https://www.codeproject.com/Articles/23176/%2FArticles%2F23176%2FCreate-a-system-tray-icon-and-a-dialog-for-a-Windo

ลองดูครับไม่รู้จะตรงความต้องการหรือเปล่า






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 13:50:06 By : Chaidhanan
 


 

No. 2



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 1 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-01-09 13:50:06
รายละเอียดของการตอบ ::
ผมติดที่ว่า เวลาเรียกใช้
เช่น

Code (C#)
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, false);


ตัว chrome มันก็จะ โผล่ขึ้นมา ครับ
ซึ่งผมอยากเรียกใช้แบบไม่ให้ chrome โผล่ขึ้นมา

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 14:23:34 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 9,587 )
บทความ ( 2 )



สถานะออฟไลน์


สามารถเขียน ให้มันแสดงผลบน panel ได้ แต่เราซ่อน panel ไว้
https://stackoverflow.com/questions/758494/how-can-i-run-another-application-within-a-panel-of-my-c-sharp-program

หรือ เปลี่ยนไปใช้ browser object แทนก็ได้ครับ กำหนดให้มัน execute โดยไม่ต้อง show
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.webbrowser?view=netframework-4.7.2
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 15:10:18 By : Chaidhanan
 


 

No. 4



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2019-01-09 15:10:18
รายละเอียดของการตอบ ::

https://stackoverflow.com/questions/758494/how-can-i-run-another-application-within-a-panel-of-my-c-sharp-program

ยังมีการรัน chrome ขึ้นมาครับ แต่ รันครั้งที่ 2 ก็มีการ Error ทันที




แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 15:57:26 By : lamaka.tor
 


 

No. 5



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอบความคิดเห็นที่ : 2 เขียนโดย : lamaka.tor เมื่อวันที่ 2019-01-09 14:23:34
รายละเอียดของการตอบ ::
พารามิเตอร์สุดท้ายไม่ต้องใส่...ลองดูครับ

Code (C#)
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url);


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 16:03:56 By : PhrayaDev(เลิกจร)
 


 

No. 6



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

โค้ดประมาณนี้ครับ

Code (C#)
void  ExecuteApplication(string Address, string arguments, bool showWindow = true)
        {
            Process proc = new Process();
            proc.StartInfo.FileName = Address;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.CreateNoWindow = showWindow;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.UseShellExecute = false;
            return proc.Start();
        }

 void LoadCodeProject(object obj)
        {
            string cri = (string)((object[])obj)[0];

            // MessageBox.Show(cri);
            int i = 1;
            this.Invoke(new Action(() => this.Text = cri));
            System.Text.RegularExpressions.MatchCollection _Matches = null;

            do
            {
                string url_1 = "https://www.codeproject.com/search.aspx?q=" + cri + "&doctypeid=1%3b2%3b3%3b13%3b14&pgnum=" + i;
                string html_1 = Program.getHTML(url_1);
                _Matches = new System.Text.RegularExpressions.Regex(@"<span class=""title""><a href=""//(www.codeproject.com/Articles/.*?)"" id="".*?"" rel=""nofollow"">.*?</a></span>", System.Text.RegularExpressions.RegexOptions.None).Matches(html_1);
                foreach (System.Text.RegularExpressions.Match myMatch in _Matches)
                {
                    string s = Program.getHTML("https://" + myMatch.Groups[1].Value);

                    new System.Threading.Thread(() =>
                    {
                        foreach (System.Text.RegularExpressions.Match myMatch_1 in
                            new System.Text.RegularExpressions.Regex(@"<li><a href=""(/.*?\.[zipar]{3,})"">.*?</a>", System.Text.RegularExpressions.RegexOptions.None).Matches(s))
                        {
                            string url = "https://www.codeproject.com/script/Articles/Download.aspx?file=" + myMatch_1.Groups[1].Value + "&rp=https://www.codeproject.com/";
                            ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, false);
                            System.Threading.Thread.Sleep(100);
                        }

                        System.Threading.Thread.Sleep(100);
                    }).Start();
                }
                new System.Threading.Thread(() =>
                {
                    System.IO.Directory.GetFiles(path, "*.zip", System.IO.SearchOption.TopDirectoryOnly).ToList<string>()
                        .ForEach(f =>
                        {
                            try { System.IO.File.Move(f, Program.RenameFileDup(path_b + @"\" + System.IO.Path.GetFileName(f))); }
                            catch { }
                        });
                }).Start();


                i++;

            } while (_Matches.Count > 0);
            this.Invoke(new Action(() => { this.Text = cri + "  Complete... "; }));
           
        }


เป็นการ forloop เพื่อ รัน chrome ขึ้นมา แต่ติดแค่ว่า เมื่อใช้ Start ตัว chrome มันก็จะ Active มาด้วยซึ่งทำให้ทำงานอย่างอื่นไม่ได้ครับ
มีวิธีให้มันรันเงียบๆ หรือ ส่ง link ให้มันโหลด ผ่าน command line ก้ได้ครับ
ตัว link จะมีการเข้ารหัส user ก่อน ซึ่งจะส่งไปให้ IDM หรือ โปรแกรมดาวโหลดเลยไม่ได้ครับ
ต้องผ่าน browser ที่ มีการ login ในเว็บก่อน ส่วนที่ใช้ chrome เพราะ มัน โหลดโดยไม่เพิ่ม tab เหมือน browser ตัวอื่นๆ ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 16:06:03 By : lamaka.tor
 


 

No. 7



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอบความคิดเห็นที่ : 6 เขียนโดย : lamaka.tor เมื่อวันที่ 2019-01-09 16:06:03
รายละเอียดของการตอบ ::
ยังขอยืนยันคำตอบเดิม จาก NO.2 เรียกใช้งานผิด ที่ถูกต้อง ต้องเรียกมันแบบนี้
Code (C#)
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url);


หรือไม่ก็แบบนี้ครับ

Code (C#)
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, true);


ลองดูอีกครั้งครับ...ไม่ได้ค่อยว่ากันต่อ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 16:24:12 By : PhrayaDev
 


 

No. 8



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ตอบความคิดเห็นที่ : 7 เขียนโดย : PhrayaDev เมื่อวันที่ 2019-01-09 16:24:12
รายละเอียดของการตอบ ::
ตอนแรกผมก็ทำแบบนั้นละครับ

https://stackoverflow.com/questions/39953600/run-a-process-silently-in-background-without-any-window

แต่มันก็ยังเด้งๆ มาอยู่ เลยลองเปลี่ยนเป็น false ดู ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 16:47:17 By : lamaka.tor
 


 

No. 9



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

Code (C#)
     
ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe", url, true);
                                   


จากที่ลองดูก็ใช้ได้ แต่แปลกที่ว่า มันมีเด้งมาบ้าง ไม่เด้งบ้าง
ไม่แน่ใจว่าเกิดจากสาเหตุอะไรเหมือนกันครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-09 17:48:09 By : lamaka.tor
 


 

No. 10



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตอบความคิดเห็นที่ : 9 เขียนโดย : lamaka.tor เมื่อวันที่ 2019-01-09 17:48:09
รายละเอียดของการตอบ ::
ไม่ทราบว่าใช้ .Net Framework อะไรครับ ผมลอง 4.0 แล้วทำไมมันใช้ UseShellExecute แล้วหาไฟล์ไม่เจอ...งง แท้
อีกวิธีที่คิดว่าซ่อนได้ชัวร์คือ เรียกใช้ API จาก user32 เหมือน No.1 ...แต่ผมยังไม่ได้ลอง

เพราะใช้ UseShellExecute ไม่ได้ จึงหันไปใช้ switch ของ Chrome แทนปรากฏว่าทำให้สามารถรันแบบ Silent ได้โดยตรง ได้แก่
Quote:
เลือกใช้ระหว่าง

--silent-launch

กับ

--headless


วิธีใช้ ก็ส่งผ่านเข้าไปในอาร์กิวเมนต์เลยครับ

ตัวอย่างการใช้ Chrome command line/switch
chrome.exe --headless "https://www.thaicreate.com/dotnet/forum.html"


รายชื่อ switch https://peter.sh/experiments/chromium-command-line-switches/

วิธีที่เหลือ ...ผมยังไม่ลอง
1. Chrome API
https://developer.chrome.com/extensions/api_index

2. ChromeDriver
https://www.seleniumhq.org/download/
https://seleniumhq.github.io/selenium/docs/api/dotnet/html/T_OpenQA_Selenium_Chrome_ChromeDriver.htm

3. Console App
ฯลฯ




ประวัติการแก้ไข
2019-01-10 11:59:05
2019-01-10 12:04:07
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-10 11:56:09 By : PhrayaDev
 


 

No. 11



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

ตัวอย่างผลลัพธ์การใช้ Switch ร่วมกับ ProcessStartInfo เพื่อโหลด DOM จาก Chrome แบบ Silent

ดาวน์โหลด

ปล.แก้ปัญหาการหาไฟล์ไม่เจอเมื่อใช้ UseShellExecute ได้แล้ว โดย ต้องกำหนดพาธแบบเต็มเท่านั้น


ประวัติการแก้ไข
2019-01-10 18:07:33
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-10 18:05:14 By : PhrayaDev
 


 

No. 12



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

UseShellExecute

ผมใช้ 4.0 ก็มีให้เลยนะครับ
ผมลองลดเป็น 2.0 ก็ไม่มี Error แสดงว่า ตัวนี้ มีมานานแล้วครับ

1311


Code (C#)
 public static bool ExecuteApplication(string Address, string arguments, bool showWindow = true)
        {
            Process proc = new Process();
            proc.StartInfo.FileName = Address;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.CreateNoWindow = showWindow;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.UseShellExecute = false;
            return proc.Start();
        }




ส่วนโค้ดในการโหลด
ผมได้ลองใช้

Code (C#)
Program.ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe"," --headless " +  url, true);


ปรากฎว่าเงียบกริบเลยครับ chrome ก็ไม่ขึ้น แถมไม่มีการโหลดไฟล์ แต่ รู้สึกได้ว่า chrome มีการทำงาน เพราะคอมหน่วงๆ ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-10 19:19:07 By : lamaka.tor
 


 

No. 13



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

โค้ดล่าสุดในการโหลด ครับ
Code (C#)
 private void Form1_Load(object sender, EventArgs e)
        {
            new System.Threading.Thread(LoadCodeProject).Start();
        }
     bool ExecuteApplication(string Address, string arguments, bool showWindow = true)
        {
            Process proc = new Process();
            proc.StartInfo.FileName = Address;
            proc.StartInfo.Arguments = arguments;
            proc.StartInfo.CreateNoWindow = showWindow;
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            proc.StartInfo.UseShellExecute = false;
            return proc.Start();
        }
        void LoadCodeProject()
        {
            string path = @"E:\codeproject";
            new List<string>() {  "datagridview" }
                .ForEach(cri =>
                {
                    string path_code = path + "\\" + cri;
                    System.IO.Directory.CreateDirectory(path_code);
                   // int i = 1;

                    System.Text.RegularExpressions.MatchCollection _Matches = null;

                    for (int i = 1; i < 200; i++)
                    {

                        this.Invoke(new Action(() => this.Text = cri + " page " + i));
                        string url_1 = "https://www.codeproject.com/search.aspx?q=" + cri + "&doctypeid=1%3b2%3b3%3b13%3b14&pgnum=" + i;
                        string html_1 = Program.getHTML(url_1);
                        _Matches = new System.Text.RegularExpressions.Regex(@"<span class=""title""><a href=""//(www.codeproject.com/Articles/.*?)"" id="".*?"" rel=""nofollow"">.*?</a></span>", System.Text.RegularExpressions.RegexOptions.None).Matches(html_1);
                        foreach (System.Text.RegularExpressions.Match myMatch in _Matches)
                        {
                            string s = Program.getHTML("https://" + myMatch.Groups[1].Value);

                            new System.Threading.Thread(() =>
                            {
                                foreach (System.Text.RegularExpressions.Match myMatch_1 in
                                    new System.Text.RegularExpressions.Regex(@"<li><a href=""(/.*?\.[zipar]{3,})"">.*?</a>", System.Text.RegularExpressions.RegexOptions.None).Matches(s))
                                {
                                    string url = "https://www.codeproject.com/script/Articles/Download.aspx?file=" + myMatch_1.Groups[1].Value + "&rp=https://www.codeproject.com/";
                                     ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe"," --headless " +  url, true);
                                    //ExecuteApplication(@"C:\Program Files\Google\Chrome\Application\chrome.exe",   url, true);
                                    System.Threading.Thread.Sleep(100);
                                }

                                System.Threading.Thread.Sleep(100);
                            }).Start();
                        }
                        new System.Threading.Thread(() =>
                        {
                            System.IO.Directory.GetFiles(path, "*.zip", System.IO.SearchOption.TopDirectoryOnly).ToList<string>()
                                .ForEach(f =>
                                {
                                    try { System.IO.File.Move(f, Program.RenameFileDup(path_code + @"\" + System.IO.Path.GetFileName(f))); }
                                    catch { }
                                });
                        }).Start();


                        // i++;
                        System.Threading.Thread.Sleep(1000);
                    }

                });


            this.Invoke(new Action(() => this.Text = "  Complete... "));

        }

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-10 19:22:01 By : lamaka.tor
 


 

No. 14



โพสกระทู้ ( 4,440 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

1311

สอบถามครับ
ส่วนใหญ่โปรแกรมเมอร์ที่ทำหน้าที่ test code ต้องทำอะไรบ้างครับ เมื่อ เราได้โค้ดมา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-11 08:36:38 By : lamaka.tor
 


 

No. 15



โพสกระทู้ ( 1,458 )
บทความ ( 0 )



สถานะออฟไลน์
Twitter Facebook Blogger

No.12
- UseShellExecute ไม่เกี่ยวกับเวอร์ชั่นของ FrameWork แต่ต้องกำหนดชื่อที่อยู่ไฟล์แบบ Full PATH

No.13
- เมื่อใช้ Chrome Switch ต้อง implement ด้วยคำสั่งภายในของ chrome เช่นกัน

No.14
- น่าสนครับ คงต้องรอท่านที่เคยทำงานด้านนี้มาช่วยแชร์

ต่อยอด No.10
Quote:
อีกวิธีที่คิดว่าซ่อนได้ชัวร์คือ เรียกใช้ API จาก user32 เหมือน No.1 ...แต่ผมยังไม่ได้ลอง


ตอนนี้ลองแล้วครับ คอนเฟิร์มใช้งานได้จริง สภาพความเงียบอาจสู้ chrome switch ไม่ได้ แต่ยังสามารถดำเนินการภายใน chrome ได้เหมือนเดิมโดยไม่ต้องใช้ internal command ซึ่งวิธีคร่าวๆ คือ ใช้ FindWindow() หาหน้าต่าง Chrome ที่เราเปิดใน process แล้วปิดอำพรางด้วย ShowWindow() โดยใช้ร่วมกับ Thread.Sleep() ประมาณ 2-3 วิ ตามความเร็วของเครื่องและการติดต่อเครือข่ายเป้าหมาย

------------
ทีแรกพิมพ์ตั้งเยอะดันส่งค้าง(ไม่สำรองไว้อีก) คราวนี้เลยเอาแบบโคตรย่อเลยครับ ขี้เกียจเริ่มใหม่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-01-12 00:28:01 By : PhrayaDev
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Process.Start() อยากรันโปรแกรมในโหมดเงียบ หรือไม่โชว์อะไรขึ้นมาเลยครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 04
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่