2013-02-27 51 views
0

我在C#中有一個ClickOnce應用程序,我想在自動卸載過程中卸載所有文件。如何在卸載ClickOnce應用程序時刪除所有數據?

以前我用下面的返回我的應用程序數據路徑:

static public string APPLICATION_DATA_PATH 
{ 
     get 
     { 
      return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData).ToString(), "myFolder\\"); 
     } 
} 

這將返回c://Users/UserName/AppData/MyFolder其作品,但與ClickOnce應用程序的自動卸載,此文件夾不會被刪除。

現在,我測試用:

static public string APPLICATION_DATA_PATH 
{ 
    get 
    { 
     if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
     { 
      // If Clickonce Application is deployed. 
      return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory 
     } 
     else 
     { 
      // If I'm in debug mode (with visual studio) 
      return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData).ToString(), "myFolder\\"); 
     } 
    } 
} 

這與Visual Studio調試,但工作的時候我發表我的申請,我安裝的任何計算機上,我的應用程序崩潰和Windows報告(WER)只是說: 「應用程序崩潰」。

我有不知道爲什麼我這個不一樣,如果我的APPLICATION_DATA_PATH是正確的工作...

你有沒有用於調試使用System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory路徑ClickOnce應用程序的任何想法?或者使用ClickOnce卸載程序刪除所有文件的想法?

編輯

我到達調試我的ClickOnce應用程序(用於幫助THX @JRoughan), 現在,我看到我的 「APPLICATION_PATH」 返回空,我已經改變我的代碼:

static public string APPLICATION_DATA_PATH 
    { 
     get 
     { 
      string path = null;     
      if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed) 
      { 
       path = System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory; 
      } 

      return path; 
     } 
    } 

如果null是回報,代碼不approuved的「System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed」,但爲什麼呢?我已經安裝了一個新的clickonce應用程序......並且部署了應用程序,代碼應該返回「CurrentDeployment.DataDirectory」!不是?

最後編輯

最後,路徑正常工作。 在我的應用程序的開始,我在這裏重新開始,如果應用程序沒有管理員的規則,但是,當ClickOnce應用程序具有管理員規則,路徑不工作... 感謝您的幫助!

+0

我認爲尾隨的反斜槓可能與它有關。 – 2013-02-27 09:07:15

+0

@JRoughan建議編輯時,請嘗試立即修復該帖子的所有問題,以便您不必在同一帖子上提出兩個修改。 – Spontifixus 2013-02-27 09:18:33

+0

@Spontifixus我再次編輯它,因爲它仍然很難看。你爲什麼不鼓勵改進?你覺得我正在試圖讓這個系統獲得2分嗎? – JRoughan 2013-02-27 09:28:44

回答

1

如果你的問題是如何調試已安裝的ClickOnce應用程序,所以你可以清楚地看到發生了什麼,你應該能夠將調試器附加使用VS菜單進程的調試 - >附加到進程「。確保首先加載正確的解決方案。

如果你只是問爲什麼數據目錄沒有被正確地清潔,我不知道;該文件夾應該遵循ClickOnce安裝的生命週期,並在卸載過程中進行清理。

難道你從這個文件夾加載資源不釋放他們,讓他們在卸載的時間鎖定和不可刪除?

+0

我不知道,我的應用程序有兩個錯誤,這(System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectory,不起作用[當我啓動我的Clickonce應用程序,此應用程序崩潰...])和其他,當我卸載我的clickonce應用程序,卸載程序不會殺死我的應用程序進程)也許兩個錯誤鏈接? 我看你的解決方案「附加進程」在調試器。 Thx – 2013-02-27 09:25:01

+0

嗨,我不試圖附加一個進程,我的Clickonce發佈崩潰,當我啓動應用程序,並且,進程被殺死與崩潰:'(謝謝你的想法。 – 2013-02-27 09:30:26

+1

你可以嘗試把'Thread.Sleep() '在應用程序一開始就給你時間來附加?多久會崩潰?更好的辦法是在Main的第一行添加一個'System.Diagnostics.Debugger.Launch()',並選擇你現有的VS實例調試 – JRoughan 2013-02-27 09:36:00

0

有一個在ClickOnce部署的機制,當您卸載該應用程序來執行任何種類的任務。從理論上講,ClickOnce清道夫最終會出現並處理文件,但我覺得這是不可靠的。基本上,對於安裝和運行程序來清除\ apps \ 2.0 \ data \任何文件夾的問題,您無能爲力。

相關問題