当前位置:  开发笔记 > 编程语言 > 正文

调试C#自定义安装程序类

如何解决《调试C#自定义安装程序类》经验,为你挑选了3个好方法。

我编写了一个安装类,它扩展了Installer并覆盖了afterInstall,但是我得到了一个空指针异常.我怎样才能调试我的课程?



1> stephbu..:

对于难以调试的代码段而言非常方便的东西是

System.Diagnostics.Debugger.Break()

将抛出任何已安装的调试器(VStudio,WinDbg,远程调试器等)捕获的断点.

使用它来调试非常棘手的区域,其中常规F5 + Go或"附加到进程"很难或不可能执行,一些示例包括:

短暂的过程

时间敏感的过程

分解产生的子流程

安装

服务停止/开始

分布式系统


没有为我工作,没有先做System.Diagnostics.Debugger.Launch()

2> Timex..:

我发现的最好方法是编写单元测试,并从单元测试中新建并初始化安装程序类:

[TestClass] public class InstallerTest {
[TestMethod]
public void InstallTest() {
  // substitute with your installer component here
  DataWarehouseInstall installer = new DataWarehouseInstall();

  string assemblyDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

  string installLogFilePath = Path.Combine(assemblyDirectory, "install.log");
  installer.Context = new System.Configuration.Install.InstallContext(installLogFilePath, null);      

  // Refactor to set any parameters for your installer here
  installer.Context.Parameters.Add("Server", ".");
  //installer.Context.Parameters.Add("User", "");
  //installer.Context.Parameters.Add("Password", "");
  installer.Context.Parameters.Add("DatabaseName", "MyDatabaseInstallMsiTest");
  //installer.Context.Parameters.Add("DatabasePath", "");

  // Our test isn't injecting any save state so we give a default instance for the stateSaver
  installer.Install(new Hashtable());
} }

至少它会更好地利用IDE工具.这对于拥有大量组件的大型安装人员尤其有用.然后,您还可以创建有序单元测试并按顺序运行它们,以在调试或自动构建期间模拟安装程序.

另一个提示是一般的SOLID/GRASS软件原理...以整洁/薄层形式开发,保持您的实际"自定义操作"安装程序逻辑非常简单,而是调用任何特定于您的安装程序的可重用API内容就像我们习惯于UI开发一样.(无论如何,安装程序只是另一个UI.)如果您的目标是在产品的所有安装程序之间共享某种UI体验,那么这一点尤为关键.



3> Bob Denny..:

惊讶没有人真正回答过.将MessageBox.Show("hello")放入自定义操作的Install()成员中.在debug config中构建部署.安装.出现MessageBox时,进入VS IDE,Debug,Attach Process并查找标记为"Managed"的msiexec实例.将调试器附加到msiexec的该实例.现在返回自定义操作的源,并在调用MessageBox.Show()之后立即放置断点.关闭MessageBox,您的断点将被点击,您正在IDE中进行调试!


+1:尽管可能值得注意的是确保*显示"显示所有进程"复选框*.另外,一个人可以`GetCurrentProcess`并用`Id`肯定地识别正确的过程.:)
推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有