无法以编程方式从浏览器应用程序中卸载SIlverlight

时间:2013-08-07 14:41:13

标签: c# silverlight install uninstall out-of-browser

我正在尝试删除Silverlight Out Of Browser应用程序,以编程方式将参数传递给sllauncher,并发布以下帖子:http://timheuer.com/blog/archive/2010/03/25/using-sllauncher-for-silent-install-silverlight-application.aspx但是在给定原点时它不会卸载应用程序。

1 个答案:

答案 0 :(得分:4)

事实证明,当您自动更新Out-Of-Browser应用程序时,Silverlight会在每个应用程序Uri上标记一个时间戳,该时间戳可以在C:\ Users \ Trevor \ AppData \ Local \中的应用程序文件夹中找到Microsoft \ Silverlight \ OutOfBrowser(AppFolderName)元数据文件。为了便于删除我们的应用程序以准备我们的新应用程序,我实现了以下内容:

UninstallExisting(GetInstalledAppUri()); // This is how it's called
//This is the two method's implementation

// TODO: Change to your app name.    
const string appName = "YourAppNameHere";

static string silverlightOutOfBrowserFolder = 
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) 
    + @"\Microsoft\Silverlight\OutOfBrowser";

private static string GetInstalledAppUri()
    {
        string xapFolderPath = Path.Combine(silverlightOutOfBrowserFolder, GetXapFolder());
        string[] lines = File.ReadAllLines(Path.Combine(xapFolderPath, "metadata"), Encoding.Unicode);
        string finalAppUriLine = lines.First(i => i.Contains("FinalAppUri="));
        return "\"" + finalAppUriLine.Replace("FinalAppUri=", "") + "\"";
    }

    private static string GetXapFolder()
    {
        string AppXapFolder = "";
        foreach (var dir in Directory.GetDirectories(silverlightOutOfBrowserFolder))
        {
            if (dir.Contains(appName))
            {
                AppXapFolder = dir;
            }
        }
        return AppXapFolder ;
    }

private static string silverlightExe
    {
        get
        {
            return Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), 
            @"Microsoft Silverlight\sllauncher.exe");
        }
    }

private static void UninstallExisting(string xapUriToRemove)
    {
        string installArgs = "/uninstall" + " /origin:" + xapUriToRemove;
        ProcessStartInfo pstart = new ProcessStartInfo(silverlightExe, installArgs);
        Process p = new Process();
        pstart.UseShellExecute = false;
        p.StartInfo = pstart;
        p.Start();
        p.WaitForExit();
    }

我希望这可以节省别人花费我几个小时的时间来弄清楚元数据文件和sllauncher.exe的所有特性