1. 程式人生 > >多個工程共享一個配置檔案

多個工程共享一個配置檔案

啟動程式:

ProcessStartInfo startInfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "JC.Interaction.BonusControl.exe");
                //startInfo.Arguments = XMLHelper.JsonSerializer(new StartParam { CodeStart = true, Id = (sender as Button).Tag.ToString(), ConfigName = Process.GetCurrentProcess().MainModule.ModuleName });
                startInfo.Arguments = string.Format("{0}|{1}|{2}", true, (sender as Button).Tag.ToString(), Process.GetCurrentProcess().MainModule.ModuleName);
                Process = Process.Start(startInfo);
                Process.EnableRaisingEvents = true;
                Process.SynchronizingObject = this;
                Process.Exited += (ss, ee) =>
                {
                    this.Visible = true;
                };

上面這段程式碼意思是

啟動 AppDomain.CurrentDomain.BaseDirectory 目錄下的JC.Interaction.BonusControl.exe 程式
設定呼叫目標程式的引數

Process.EnableRaisingEvents 設定呼叫目標程序被關閉時是否觸發 Exited 事件

Process.SynchronizingObject 設定執行 Exited 事件的執行者為啟動它的程式。不然會報錯,因為跨執行緒了。

這裡主要說一下 Arguments 的引數  ,這裡所有的引數都是自己定義的,你想用什麼引數就傳什麼引數,所以我就是這裡把配置檔案傳過去的。

說到配置檔案 那麼就得說 winform 的預設配置檔案 App.config 。

它在編譯後會生成為 當前專案名稱+".config" 例如:專案名稱為 JC.System.Bonus 。那麼 App.config 就會被生成為JC.System.Bonus.config

獲取啟動程式名稱: Process.GetCurrentProcess().MainModule.ModuleName

所以我們這裡就把這個引數傳過去了。 

---------------- 題外話---------------

本想用序列化物件傳引數的  不知道為什麼  在另一個程式裡面一直都獲取不到,到處查資料,弄了幾個小時放棄了,直接用分隔符。  我不知道是引數裡面有什麼特殊字元,還是字數有限制什麼的  。

目標程式:

 [STAThread]
        public static void Main(string[] args)
        {
            try
            {
                //防止使用者直接啟動程式
                var _params = args[0].Split('|');
                if (Convert.ToBoolean(_params[0]))
                {
                    CommonManager.Id = _params[1];
                    //設定此工程的配置檔案
                    System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, _params[2] + ".config"));
                    new Application().Run(new MainWindow());
                }
                else {
                    Environment.Exit(0);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                Environment.Exit(0);
            }
        }
上面就是目標程式的入口

剛才我們傳過來的引數就在 args 裡面    這裡我用的分隔符來傳參的。

然後我們用 

 System.AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE",配置檔名稱);  來設定當前程式的預設 config 
 System.AppDomain.CurrentDomain.BaseDirectory 是獲取的專案路徑,就是編譯生成之後的debug路徑。

 _params[2] + ".config" 這個引數就是剛才傳過來的,後面再加上config字尾就可以了。

最後我們用  System.Configuration.ConfigurationManager.AppSettings["key"]   就可以獲取到config裡面的鍵值對資訊了。

AppDomain.CurrentDomain.BaseDirectory 目錄下的JC.Interaction.BonusControl.exe 程式

相關推薦

工程共享一個配置檔案

啟動程式: ProcessStartInfo startInfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "JC.Interaction.BonusControl.exe");

一臺機器上搭建redis例項的配置檔案修改部分

1、單個redis服務搭建請參考:redis服務搭建 2、一臺Redis伺服器,分成多個節點,每個節點分配一個埠(6380,6381…),預設埠是6379。 每個節點對應一個Redis配置檔案,如: redis6380.conf、redis6381.conf #cp redis.conf

[Go]基於Go語言的Web路由轉發,網站共享一個端口

鏡像 語言 域名 服務 web服務 進行 測試 其實在 所有 服務器上跑了很多的Web服務,但都是基於Golang自己寫的,不能像IIS或者Apache一樣共享端口和綁定域名,很多端口號自己又記不住 所以呢,我就利用端口轉發技術,制作了這樣一個Web路由 其主要原理就是

Android開發專案共享一個Module

有段時間沒有更新文章了,可能是自己最近重心偏離了航線,尋找真愛了,哈哈。 在安卓開發中,我們維護的專案較多的時候,難免會有多個包含相同業務的專案。簡單的module依賴,需要將module庫放在專案根目錄下,然後再專案中以include ‘:Module’

Spring匯入獨立的 .properties配置檔案

在使用spring的時候如果在多個xml檔案中配置了 <context:property-placeholder location=""/> 在控制檯會列印警告,導致程式無法執行 如下面我在使用mybatis和redis的時候 spring-

CLion工程中只能有一個main函式 &&怎麼同時編寫main函式的C檔案

記得大一學C語言的時候,我們就知道一個工程中只能有一個main函式 最近下載了CLion,我很懶,想在一個工程下建好幾個c檔案,裡面都有main函式,結果編譯執行的時候不通過 這才想起來,無論有多少複雜的c檔案和函式,絕對有且只有一個main函式 記得把其他帶有main函式的檔案

一個解決方案下 工程 每個工程的環境變數的配置

背景: 一個解決方案下有多個工程,在環境變數中,已經添加了BoostDir和BoostLibs這兩個環境變數。 問題: WorkStation工程中使用的boost的環境變數名字為BoostDir和BoostLibs。 編譯整個解決方案下的所有工程的時候,發現,依然無法識

一個專案中,建立工程檔案目錄建立方法

個人建議直接看文章的最後部分的那種方法,那種方法容易上手,前面幾種很麻煩很累原始碼地址:https://download.csdn.net/my這個程式碼肯定有用,保證能執行。是我自己寫1、在D盤建立空資料夾qMulti 2、使用Qt Creator建立App應用程式:Big

如何配置idea使一個視窗包含工程

 你是否在煩惱為什麼idea不能像eclipse那樣,一個視窗含任意個工程?那麼看這篇文章就對了。只要輕鬆的幾行配置即可解決問題。   建立一個目錄 mutil_projects 將hello-server,hello-web,helloservice 等工程clone到該

Linux環境下庫svn安裝與配置(獨立庫,公用一個配置檔案

[先在伺服器中開啟放行 3690 埠!!!] (1)檢視是否已經安裝了svn 命令:svnserve --version 沒有安裝,出現下面資訊-> 已經安裝,出現下面版本資訊-> 檢視安裝svn的路徑資訊:rpm -ql subversion

springboot配置檔案配置 application.properties的配置 版本 sprigboot2.1

注意副配置檔案的命名方式是application-XXX.properties spring.profiles.active=druid spring.profiles.active=druid server.address=127.0.0.1 s

log4j在tomcat下工程的log4j.properties配置

關於tomcat下多個工程配置一個log4j.properties,達到輸出各自的日誌的問題, 經過實際工作的總結和調查,在這裡做出一個總結和備忘。 提起log4j的配置,我們常用的配置辦法是為每個工程建立一個log4j.properties檔案,並在其中寫入自己的輸出日

linux 使用者對一個檔案進行操作 檔案鎖和路複用

①如果多個使用者對一個檔案進行操作的時候,如何解決,考慮用檔案鎖的形式和多路複用形式;1)檔案鎖找到一個函式flock()對檔案進行加鎖解鎖等操作,就是在使用前對檔案進行上鎖,在使用後對檔案進行解鎖,

Tomcat中配置工程使用不同埠訪問問題

因為沒有深入的去學習Tomcat,所以下面的方法只是簡單的解決了這個問題。 第一種方式是: Eclispse使用的是安裝版的Tomcaat,專案直接釋出到Tomcat/webapps目錄下。 直接去Tomcat中去修改server.xml檔案,將檔案內容修

一個Xcode頁面建立工程

Xcode裡面是可以同時存在多個工程的。可以通過存放在同一個工作空間來實現同一個Xcode頁面存在多個工程,也就是有多個xcodeproj。如下圖所示。 在Xcode頁面中管理3個工程 這樣不僅可以方便管理幾個相似功能的工程,更重要的是,可以實現多工程聯編。 接下來我們

Flume合併一個channel上傳檔案到Hdfs

需要交流請進群-- 494831900 --我和群中朋友會及時回答 需要交流請進群-- 494831900 在tohdfs.conf 中配置如下 ----------------------------------------------------------------

Tomcat下配置javaWeb,一個IP繫結域名

本文以繫結3個javaWeb專案為例,講述一個IP地址繫結3個個域名: (1)首先準備好3個javaWeb的war包; (2)在Tomcat下建立3個不同名稱的資料夾,如webapps、webapps

按鈕用一個點擊事件

多個按鈕用一個點擊事件多個按鈕用一個點擊事件有btn1,btn2,btn3,btn4,btn5,5個按鈕,如何區分哪個按鈕觸發的點擊事件先將按鈕放到一個數組中private _btnArr:Array = new Array(); private function initBtnArr():void {

按鈕提交一個form表單

class 按鈕 控制 () ctx submit repo rep 事件 多個按鈕提交一個form表單,然後執行控制層不同的方法 在button的onclick事件下可以重寫form的action屬性 <button class="common_button" on

按鈕共用一個消息響應函數

mfc c++ 在特殊情況下,需要多個按鈕共用一個消息處理.如工具欄上的按鈕,行為都類似.可以考慮用同一個消息響應函數,來減少代碼的冗余.一、在消息映射中添加關聯的消息響應關系BEGIN_MESSAGE_MAP(CscaleweightDlg, CDialog) ... ON_CONT