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 アプリケーションに管理者ルールがある場合、パスが機能しません...助けてくれてありがとう!