2010-08-05 230 views

回答

21

通过添加部署清单(“foo.application”)作为您的Dotfuscator项目的输入,您可以使用Dotfuscator的商业版来自动混淆ClickOnce应用程序。 Dotfuscator将允许您为ClickOnce应用程序中包含的程序集添加任何必需的排除,并将创建包含混淆程序集的更新的部署和应用程序清单。

包含在Visual Studio(包括Visual Studio 2010)中的Dotfuscator的免费版本没有自动混淆ClickOnce应用程序的功能。为了获得功能混淆的ClickOnce应用程序,您需要重新创建或更新ClickOnce清单,因为混淆会更改程序集的签名。

您可以使用mage.exemageui.exe(包含在Windows/.NET SDK中)更新ClickOnce清单。如果您要使用mage.exe,您需要注意,您无法使用ClickOnce选项中的“使用.deploy文件扩展名”选项,因为它无法识别它。

假设您的ClickOnce应用程序被命名为“富”,是在1.0.0.0版本,你将要遵循的流程是:

  1. 发布您的ClickOnce应用程序到磁盘目录下
  2. 运行Dotfuscator的CE并从您的项目的bin目录中添加要混淆的程序集
  3. 混淆程序集。混淆后的程序集将默认放入名为“Dotfuscated”的子目录中。
  4. 辞职混淆的组件与SN.EXE(如果只有最初强命名它们)
  5. 拷贝过来的的ClickOnce的那些顶部发布\应用程序文件\ Foo_1_0_0_0目录
  6. 更新的应用程序清单混淆的组件辞职吧:

    mage.exe -Update “应用程序文件\ Foo_1_0_0_0 \ Foo.exe.manifest” -CertFile “C:\富\ foo.pfx” - 密码密码

  7. 更新部署清单和辞职:

    mage.exe -Update Foo.application -AppManifest“Application Files \ Foo_1_0_0_0 \ Foo.exe.manifest”-CertFile“c:\ Foo \ foo。PFX” - 密码密码

您现在有一个有效的应用程序,并使用模糊组件部署清单,你也可以使用MageUI.exe工具来完成相同的任务(和它知道如何处理与组件。部署扩展名),但它是不容易实现自动化。

+0

嗨@Joe,你能解释证书pfx文件来自哪里吗? – RHaguiuda 2011-06-09 18:28:25

+0

@RHaguiuda如果您将软件运送给外部客户,那么它通常来自证书供应商(Comodo,Thawte等)。对于内部应用程序,我使用了由域控制器签名的证书或者只是自签名的makecert.exe证书。 – 2011-06-16 11:12:11

+0

Hi @JoeKuemerle完成此操作后,我的应用程序停止在客户端计算机上工作。它正在检查更新,下载并运行它。然后停止工作。我检查了事件查看器并找到了 1.0.0。0 4f29010f Ç d System.NullReferenceException C:\用户\ interbiz \应用程序数据\本地\ TEMP \ WER22D1.tmp.WERInternalMetadata.xml – Bindas 2012-02-01 09:36:46

1

是的,这些是兼容的技术。 ClickOnce只关注于将应用程序及其关联的二进制文件部署到目标机器。 Dotfuscator会破坏DLL和EXE文件。只要您在发布应用程序之前运行Dotfuscator,它们就可以一起工作。

+0

但是,在VS2010中,如果'发布'clickonce,则没有dll/exe。如何在发布应用程序之前运行Dotfuscator。 – Begtostudy 2010-08-06 00:43:08

+1

添加'在发布应用程序之前运行Dotfuscator',如何发布? – Begtostudy 2010-08-06 01:07:40

0

如果您使用VS2010,随附的Dotfuscator会混淆文件,然后为您重新签署清单。 [编辑 - 这是不正确的,除非你购买完整版本;它就像VS2008一样工作。]

如果您使用的是VS2008,则需要发布,然后混淆文件,然后使用Mage或MageUI重新签名清单。

+0

但是,在VS2010中,如果'发布'clickonce,则没有dll/exe。如何在发布应用程序之前运行Dotfuscator。 – Begtostudy 2010-08-06 00:43:39

+0

查看上面的指示。感谢先发制人,在我向他们询问twitter上的信息后发布了答案。 :-) – RobinDotNet 2010-08-13 09:14:00

3

我也有类似的乔Kuemerle的一个解决方案,但在此之前发布过程。这适用于Visual StudioMSBuild命令发布线。

BeforePublish目标添加到项目文件。

<ItemGroup> 
    <ClickOnceFiles Include="bin\Release\ClickOnce.*"/> 
</ItemGroup> 
<Target Name="BeforePublish"> 
    <Exec Command="{path to dotfuscator}\dotfuscator.exe Dotfuscator.xml" /> 
    <Exec Command="mage.exe -u bin\Release\ClickOnce.exe.manifest" /> 
    <Exec Command="mage.exe -u bin\Release\ClickOnce.application -AppManifest bin\Release\ClickOnce.exe.manifest" /> 
    <Copy SourceFiles="@(ClickOnceFiles)" DestinationFolder="obj\Release" OverwriteReadOnlyFiles="True" /> 
</Target> 

ClickOnce的文件ClickOnce.applicationClickOnce.exeClickOnce.exe.manifest。我的dotfuscator.xml与项目文件位于同一个文件夹中。密钥是最后一个命令,将ClickOnce文件复制到obj文件夹。

+0

嗯,上面的哪一部分根据文件的数量重新生成清单?毕竟,我可能在混淆之前拥有X个文件,但在混淆之后只有一个文件(当然,不包括清单和.vsto文件)。 – 2012-01-26 18:17:55

1

我不知道这是否是唯一可能在Visual Studio的后续版本,但对我来说,完美的作品:

  1. 构建可执行文件中发行模式
  2. 启动的EXE,变质您的选择和修改该文件在OBJ /发行/ <文件名.exe文件>(注意:不是斌/OBJ/
  3. 发布的Visual Studio现在按钮,假设最后的构建进行了最新
  4. 利润:d
0

的深海混淆器的工作使用ClickOnce

0

Eziriz .NET反应堆有一个很好的ClickOnce集成。