2016-11-02 27 views
1

我想找到一種方法來在我的WPF應用程序中運行CMD過程,而無需將CMD應用程序寫入用戶的臨時目錄。調用安裝在用戶目錄中的資源

我已經創建的應用程序本質上是執行另一個CMD應用的包裝和意圖如下:

  1. 將應用程序安裝到用戶的Program Files目錄。
    • 應用程序安裝的目錄還會有一個文件夾,標記爲可容納CMD應用程序(upgrade.exe)的資源和CMD應用程序需要的文件(image.bin)。
  2. 從桌面快捷方式或從開始菜單運行應用程序。
  3. 當應用程序需要時,從它所在的Program Files位置(「C:\ Program Files \ appname \ resources \ upgrade.exe」)調用upgrade.exe CMD應用程序。

我現在所擁有的是將文件寫入用戶臨時目錄然後從那裏運行它的代碼(代碼如下)。這兩個文件都作爲資源添加到我的解決方案中,但如果我需要與他們做不同的事情來使用它們,那就沒有問題了。我不知道是否有辦法確切地知道上面描述的位置,但是,如果有,我該如何改變我的代碼以便這樣工作?

 path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "upgrade.exe"); 
     File.WriteAllBytes(path, Properties.Resources.upgrade); 
     imagepath = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "image.bin"); 
     File.WriteAllBytes(imagepath, Properties.Resources.image); 
     ProcessStartInfo processSetup = new ProcessStartInfo(path) 
     { 
      WorkingDirectory = System.IO.Path.GetTempPath(), 
      Arguments = String.Format("-F -p {0} -f image.bin, UserComPort), 
      UseShellExecute = false, 
      CreateNoWindow = true, 
      RedirectStandardError = true, 
      RedirectStandardOutput = true 
     }; 
     update = Process.Start(processSetup); 

,因爲它使我的文件到不同的位置,我想他們在用戶的PC上永久居住,我不喜歡這種方法,儘管我知道我可以將它們刪除我完成後使用它們。

任何幫助將不勝感激。

編輯:如下所示,正確的解決方案是使用AppDomain.CurrentDomain.BaseDirectory位置,然後將已知的目錄位置追加到該路徑。你必須知道你的資源將在你的程序的目錄結構中使用這種方法(我使用Inno Setup並定義了我希望這些資源駐留的「Dir」)。最終的解決方案是如下:

​​

這導致在不需要文件寫入到用戶的PC上的新位置更清潔的解決方案。感謝Phil N DeBlanc提供此解決方案!

回答

1

如果我明白你在問什麼,我想你可以找到一個解決方案here。您可以獲取當前正在執行的目錄,然後將必要的剩餘路徑信息附加到您的CMD目錄。

+0

我想這是正確的實現。基本上我會提取當前目錄(這將是用戶決定安裝我的應用程序的目錄),然後將「\ resources \ upgrade.exe」附加到路徑以獲得我想要的文件。我會玩這個方法,但我敢肯定這是正確的答案。非常感謝! – H0ckeyfr33k99

+0

這是一個完美的實現。我將用解決方案編輯我的代碼。 – H0ckeyfr33k99

+0

很高興聽到! –

相關問題