0

C# で ClickOnce アプリケーションを使用しており、自動アンインストール中にすべてのファイルをアンインストールしたいと考えています。

以前は、次を使用して Application Data Path を返しました。

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 CRASH" とだけ表示されます。

APPLICATION_DATA_PATH が正しい場合にこれが機能しない理由がわかりません...

System.Deployment.Application.ApplicationDeployment.CurrentDeployment.DataDirectoryパスを使用して ClickOnce アプリケーションをデバッグするアイデアはありますか? または、ClickOnce アンインストーラーですべてのファイルを削除するというアイデアはありますか?

編集

ClickOnce アプリケーションをデバッグするために到着しました (thx @JRoughan のヘルプ)。「APPLICATION_PATH」が null を返すのを見ました。コードを変更しました。

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 が返された場合、コードは「System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed」を承認しませんでしたが、なぜですか? 新しい clickonce アプリケーションをインストールしました... アプリケーションがデプロイされると、コードは "CurrentDeployment.DataDirectory" を返すはずです! 番号 ?

最終編集

最後に、パスは正しく機能します。アプリケーションに管理者ルールがない場合、アプリケーションの開始時にここで再起動しますが、Clickonce アプリケーションに管理者ルールがある場合、パスが機能しません...助けてくれてありがとう!

4

2 に答える 2

1

インストールされたClickOnceアプリケーションをデバッグして、何が起こっているかを正確に確認する方法が質問の場合は、VSメニューの[デバッグ]->[プロセスにアタッチ]を使用してデバッガーをプロセスにアタッチできるはずです。適切なソリューションが最初にロードされていることを確認してください。

データディレクトリが正しくクリーンアップされていない理由を尋ねているだけなら、よくわかりません。このフォルダは、ClickOnceのインストールの存続期間に従い、アンインストール中にクリーンアップする必要があります。

このフォルダからリソースをロードし、それらを解放せずに、アンインストール時にロックされて削除できないようにすることは可能ですか?

于 2013-02-27T09:11:07.293 に答える
0

ClickOnce 配置には、アプリケーションのアンインストール時に何らかのタスクを実行するメカニズムはありません。理論的には、最終的には ClickOnce スカベンジャーが現れてファイルを処理しますが、これは信頼できないと思います。基本的に、問題の \apps\2.0\data\whatever フォルダーをクリアするプログラムをインストールして実行する以外に、これに関してできることは何もありません。

于 2013-02-28T06:46:54.153 に答える