[英]C# Starting a program from another program
我有這個方法
private void StartSDCBackupSet() {
using (Process p = new Process()) {
p.StartInfo.FileName = "SDCBackup";
try {
p.Start();
BackIcon.ShowBalloonTip(5000, "Backup", "Editor for settings startet", ToolTipIcon.Info);
} catch (Exception) {
MessageBox.Show("Program til settings blev ikke fundet");
}
}
}
根據我能找到的文檔 - 這里有很多答案 - 它應該啟動另一個程序 - SDCBackup.exe。
它沒有。 我已經嘗試將.exe添加到文件名中,但它並沒有什么區別。 我收到消息的消息框...我檢查了p
和StartInfo
,一切看起來都正確。 StartInfo.UseShellExecute
為true。
調試顯示,它是行p.Start();
產生異常。 而Exception是一個帶有消息的System.ComponentModel.Win32Exception
:
文件未找到
文檔說,上面的代碼與Windows菜單中的Run
一樣,但顯然沒有。
如果我在Windows菜單的RUN部分中編寫SDCBackup
,則SDCBackup.exe將按預期啟動。 (而且SDCBackup.exe是一個ClickOnce安裝,沒有人真正知道在哪里找到 - 除了Windows本身......)
那么為什么我的代碼不能解決問題呢?
采用
p.StartInfo.FileName = "SDCBackup.exe";
Windows測試已知的文件類型,如果它是.exe(或任何其他已知類型,如.bat,msc,scr等),則運行它。 據我所知.NET不會這樣做。
您可以嘗試使用Path.GetFullPath
( https://msdn.microsoft.com/de-de/library/system.io.path.getfullpath ( v= Path.GetFullPath
) Path.GetFullPath
)但我認為它應該適用於相對路徑同樣。
還要確保該文件位於debug / release文件夾中(啟動SDCBackup的.exe所在的文件夾),因為Windows查找PATH
變量中包含的已知目錄(例如C:\\windows\\System32
等) ),而.NET則沒有。 如果它不在該文件夾中,請提供完全限定的路徑,它應該可以工作。
似乎沒有人知道如何在另一個應用程序中引用ClickOnce安裝的應用程序。 (在微軟問這個問題時,也沒有得到任何有用的回復。)
似乎ClickOnce應用程序安裝在當前用戶區域的某個位置,例如:
C:\Users\[user]\AppData\Local\Apps\2.0
從那里下來3個隨機命名的文件夾 - 不同用戶的文件夾名稱不同; 所以似乎沒有辦法解決這個問題。
但我確實找到了一種方法來為Microsoft創建一個常規安裝程序,用於Visual Studio C#解決方案。
我用它來設置我的應用程序的安裝路徑,這樣他們就可以互相找到它 - 並且它起作用。
它涉及向解決方案添加安裝程序項目。
我發現,除了解釋,
我還發現,版本控制不是自動的。 您必須手動設置版本號 - 為簡單起見,這是一種與Visual Studio使用的格式不同的格式。 如果您設置了版本,它將自動卸載同一應用程序的先前版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.