簡體   English   中英

C#從另一個程序啟動程序

[英]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添加到文件名中,但它並沒有什么區別。 我收到消息的消息框...我檢查了pStartInfo ,一切看起來都正確。 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.GetFullPathhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM