2013-02-19 56 views
0

我正在创建一个安装程序,它需要更改我的一个silverlight组件的配置文件。 该组件的配置文件位于XAP文件中。有什么方法可以更改该配置文件吗?NSIS更改XAP文件中存在的配置文件,即Silverlight组件构建

+0

xap文件只是zip文件。所以你可以提取一个文件并使用标准的zip文件处理来替换它。我不知道NSIS是否可以查看zip文件。 – ChrisF 2013-02-19 15:25:39

+0

添加了silverlight和xap标记。你的答案在于应用程序设计而非安装魔术。 – 2013-02-19 20:13:19

+0

Mike看起来像有一个解决方案。谢谢迈克! – 2013-02-20 14:33:21

回答

0

我已经在C#中编写了控制台应用程序,它正在XAP构建中进行这些更改。我只是从我的安装程序调用该应用程序,因为我无法在NSIS中找到任何方法。

1

将您的配置文件与您的XAP文件并排存放。

  • ../YourProject.XAP
  • ../YourProjectSettings.XML

下面的代码会下载一个名为 “将Settings.xml”,这在同一个目录下坐作为您的XAP文件,并将其放置在独立存储中。随后可以根据需要打开/关闭/解析它。

private void DownloadFile() 
    { 
     Uri downloadPath = new Uri(Application.Current.Host.Source, "Settings.xml"); 
     WebClient webClient = new WebClient(); 
     webClient.OpenReadCompleted += OnDownloadComplete; 
     webClient.OpenReadAsync(downloadPath); 
    } 

    private void OnDownloadComplete(object sender, OpenReadCompletedEventArgs e) 
    { 
     if (e.Error != null) throw e.Error; 

     using (var isoStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      IsolatedStorageFileStream isoStream = isoStorage.CreateFile("CachedSettings.xml"); 

      const int size = 4096; 
      byte[] bytes = new byte[4096]; 
      int numBytes; 

      while ((numBytes = e.Result.Read(bytes, 0, size)) > 0) 
       isoStream.Write(bytes, 0, numBytes); 

      isoStream.Flush(); 
      isoStream.Close(); 
     } 
    } 

这样一来,你的安装程序可以添加必要的设置文件并排侧通过有条件文件拷贝你的XAP。破解XAP是一种破解;它会使您的安装程序代码复杂化并使签名的XAP无效。

+0

不错,优雅。现在所有的安装程序都需要更新Settings.xml。 – 2013-02-20 14:36:17