WPF 利用Process.Start()方法啟動指定路徑下的exe檔案並傳遞引數
簡單來說就是實現一個程式A 開啟程式B,並且在開啟的時候傳遞一些引數給B,最後在B視窗上顯示出引數,這個小功能也是折騰了我半天。現在把我的過程整理記錄下來。
1.首先我們得有一個被呼叫的程式,新建一個簡單的WPF程式,命名為:argTest。裡面加一個label,用來顯示接收到的引數。直接執行該程式如下:
2.新建一個WPF程式用來啟動我們的argTest.exe程式,命名為call。新增窗體load事件,在load裡呼叫Process.Start()方法。如下
執行call程式,會彈出兩個視窗,當然現在我們沒有傳遞任何引數。private void wndLoad(object sender, RoutedEventArgs e) { string path = "D:\\Project\\WPF-TEST\\argTest\\argTest - 副本\\bin\\Debug\\argTest.exe"; if (File.Exists(path)) { Process.Start(path); } }
3.其實要傳引數很簡單,只需要呼叫 Process Start(string fileName, string arguments)這函式即可,難就難在怎麼去接收引數。網上百度一番基本做法是修改被呼叫程式(argTest.exe)的入口函式:
1> 新增新建類Program
2>新增全域性變數,過載MainWindow的建構函式,以便傳遞引數
string[] recArgs; public MainWindow(string[] args) { InitializeComponent(); if (args.Length > 0) { recArgs = args; } }
3>手動新增帶引數入口Main函式
[STAThread]
static void Main(string[] args)
{
argTest.App app = new App();
MainWindow window = new MainWindow(args);
app.MainWindow = window;
app.InitializeComponent();
app.Run();
}
4>專案屬性設定啟動物件為argTest.Program
4.在argTest專案新增load事件,在load事件裡更改窗體上label的顯示內容。
private void wndLoad(object sender, RoutedEventArgs e)
{
msgLabel.Content = "接收到的引數是:";
string temp = "";
if (recArgs.Length > 0)
{
//拼接引數
for (int i = 0; i < recArgs.Length; i++)
{
temp += recArgs[i] + " ";
}
msgLabel.Content = msgLabel.Content + temp;
}
5.將call程式中原來load函式裡的 Process.Start(path); 替換為 Process.Start(path,"this is a test");
6.重新生成argTest後,執行call。你會發現引數依然沒有傳遞到argTest窗體,這是為什麼呢?(可以自己先做測試找問題)
是沒有呼叫我們過載的建構函式嗎?
在建構函式裡新增Message.show(args[0]);你會發現是呼叫了建構函式的,且能打印出值“this”。說明引數是傳遞進去了,並且以空格區分引數。
引數既然傳遞進去了,那為什麼會在視窗上沒有顯示出來呢?去掉建構函式裡的列印,我們再在load方法裡列印recArgs的長度,居然沒有打印出來,我們該了入口函式不會 連load函式也不進入了吧。直接MessageBox.Show(“進入load”);發現是會進入load的。為什麼沒有打印出recArgs的長度來呢? 把它放在try{}catch{} 裡 你會發現recArgs居然 是報null錯誤,那麼這裡只可能是recArgs為null,在前面我們已經打印出來了 引數確實傳遞進來了,為什麼recArgs還會為null呢?(你可以自己驗證一下)
為了找到這個原因,在argTest程式裡所有函式和變數均打上一個端點,直接執行,你會發現一個奇怪的問題預設建構函式也會被執行,全域性變數會被定義兩次。這就能解釋為什麼recArgs為null了。但為什麼會執行兩次呢?我在手動新增的入口函式裡面增加斷點單步執行,發現預設建構函式是在執行app.Run()的時候被呼叫的。檢視官方文件,原來Run方法會呼叫 Application的OnStartup方法,在該方法中會再次呼叫MainWindow的預設建構函式。所以我們要繼承Application類重寫OnStartup方法。
namespace argTest
{
class Program
{
[STAThread]
static void Main(string[] args)
{
CustomApplication app = new CustomApplication();
//MainWindow window = new MainWindow(args);
//app.MainWindow = window;
app.Run();
}
}
class CustomApplication : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow window = new MainWindow(e.Args);
window.Show();
}
}
}
現在直接執行 你會發現不會執行預設建構函式。 現在刪除所有列印程式碼執行call程式就沒有問題了完工
本來想設定0資源分下載,現在資源必須選擇下載資源分。。。。。
相關推薦
WPF 利用Process.Start()方法啟動指定路徑下的exe文件並傳遞參數接收參數
name 位置 處理 指定路徑 public AR res ini pri WPF 利用Process.Start()方法啟動指定路徑下的exe文件並傳遞參數接收參數 在開發中遇到這樣一個需求:WPF程序A啟動WPF程序B並且傳遞參數,WPF程序B接收參數並處理。
WPF 利用Process.Start()方法啟動指定路徑下的exe檔案並傳遞引數
簡單來說就是實現一個程式A 開啟程式B,並且在開啟的時候傳遞一些引數給B,最後在B視窗上顯示出引數,這個小功能也是折騰了我半天。現在把我的過程整理記錄下來。 1.首先我們得有一個被呼叫的程式,新建一個簡單的WPF程式,命名為:argTest。裡面加一個label,用來顯示接
python實現將某程式碼檔案複製/移動到指定路徑下 (檔案、資料夾的移動、複製、刪除、重新命名)
用python實現將某程式碼檔案複製/移動到指定路徑下。 場景例如:mv ./xxx/git/project1/test.sh ./xxx/tmp/tmp/1/test.sh (相對路徑./xxx/tmp/tmp/1/不一定存在) # -
java 刪除指定路徑下的檔案
import java.io.File;import java.util.Scanner; public class deleteFile{ /** * @param args */ public static void main(St
android 獲取指定路徑下所有檔案,將檔案從一個目錄copy到另一個目錄,執行linux命令
/** * 複製整個資料夾內容 ,可以從data/data/包名下 拷貝到 data/data/包名下。也可以copy到 /sdcard 下 * @param oldPath String 原檔案路徑 如:c:/fqf
遞迴列印指定路徑下所有檔案內容到指定檔案裡
# -*- coding: utf-8 -*- """遞迴列印指定路徑下所有檔案 Usage: printDirectory <printFilePath> <saveFilePath> """ from docopt import docopt imp
Python實現遍歷指定路徑下的檔案列印並加入列表
直接上程式 # -*- coding: utf-8 -*- import os file_path_list = []# 列表用於存放路徑 def traverse(folder_path):
java 顯示指定路徑下得檔案或者刪除指定路徑下的全部檔案
顯示指定目錄下的檔案(運用遞迴再來訪問資料夾)package com.JavaIO; import java.io.*; public class ShowDirTest { public stati
node.js+react全棧實踐-Form中按照指定路徑上傳檔案並
書接上回,講到“使用同一個新增彈框”中有未解決的問題,比如複雜的欄位,檔案,圖片上傳,這一篇就解決檔案上傳的問題。這裡的場景是在新增彈出框中要上傳一個圖片,並且這個上傳元件放在一個Form中,和其他文字欄位一起提交給介面。 這裡就有幾個要注意的問題: 圖片上傳時最好能在前端指定
初識TypeScript:查詢指定路徑下的檔案按型別生成json
如果開發過node.js的話應該對js(javascript)非常熟悉,TypeScript(以下簡稱ts)是js的超集。 下面是ts的官網: https://www.tslang.cn/ 1.環境配置(如果已經進行過環境配置,可以跳過此步) 開發ts需要先簡單的配置開發環境,如果使用的是Vis
VBS 下載指定URL地址EXE檔案並執行命令:
set xPost = createObject("Microsoft.XMLHTTP") xPost.Open "GET","http://down.xxsafe.com/setup.exe",0 xPost.Send() Set sGet = createObjec
C# Process.Start()方法詳解
stat 字符串 檔案 atd 一個 用戶名 菜單 簡單介紹 run System.Diagnostics.Process.Start(); 能做什麽呢?它主要有以下幾個功能: 1、打開某個鏈接網址(彈窗)。 2、定位打開某個文件目錄。 3、打開系統特殊文件夾,如“控制面板
fullfile+利用matlab讀取指定路徑下的影象
<span style="font-family:Times New Roman;">% 讀入指定路徑imgFolder下的影象imgName imgFolder = 'F:\博\快盤\影象+資料\images\文章實驗圖'; %指定路徑 imgName = 'tile3_24.png'; %指
C# Process.Start方法
-s param mms int 命令行 install ont 更多 word System.Diagnostics.Process.Start(); 主要功能: 1、打開某個鏈接網址(彈窗)。 2、定位打開某個文件目錄。 3、打開系統特殊文件夾,如“
抓取指定路徑下所有文檔名
mds 所有 -- 2.6 div ast txt rom char --方法1: EXEC xp_dirtree ‘\\172.6.6.6\D$\TEXT\‘,1,1 --方法2: CREATE TABLE #TXT_Name (NAME VARCHAR( 2000)
掃描指定路徑下的全部請求路徑(基於SpringMVC)
ada access cto url ssm private 博客 ble ack 通過上面兩篇博客,我們能夠得到指定類上的全部請求路徑。現在需要的是,給定一個指定的路徑,獲取全部的請求路徑。 public class RequestUrlScannerHelper {
刪除指定路徑下指定天數之前(以文件的最後修改日期為準)的文件:BAT + REG + VBS
2.0 ane blog set logo fmt 演示 back style @echo off ::演示:刪除指定路徑下指定天數之前(以文件的最後修改日期為準)的文件。 ::如果演示結果無誤,把del前面的echo去掉,即可實現真正刪除。 ::本例調用了臨時VBS代碼
Python3在指定路徑下遞歸定位文件中出現的字符串
裝飾器 post sea 搜索 ima all entry syntax sys [本文出自天外歸雲的博客園] 腳本功能:在指定的路徑下遞歸搜索,找出指定字符串在文件中出現的位置(行信息)。 用到的python特性: 1. PEP 318 -- Decorators
python筆記之按文件名搜索指定路徑下的文件
join 目錄 utf-8 range roo 圖片路徑 brush info rom 1.搜索文件名中以指定的字符串開頭(如搜索dll,結果中含有dll a,dll abc等) 我的目錄下有dll a.txt和dll.txt文件 其中a文件夾下還有這兩個文件 我希
遞歸刪除指定路徑下的空目錄
removedirs遞歸刪除指定路徑下的空目錄: 註:如第一級目錄要保留 vi a1.py #!/usr/bin/python import os dir="/root/python" os.chdir(dir) for f in os.listdir(dir):if os.path.is