2011-07-12 40 views
2

我一直在写最近几周的c#程序,并且文本构建刚刚获得最终签收。我通过visual studio发布了它,将安装程序包发送给我的客户端,并且在他们的计算机上无法正常工作。为了测试的目的,我已经为自己安装了完全相同的二进制文件。它是一个以一系列弹出窗口开始的程序,在最终弹出窗口后,程序只是关闭而不是启动主窗口。我明白,如果不能访问我的源代码和我的客户的计算机故障排除是不可能的,但坦率地说,我甚至不知道从哪里开始。我可以就什么事情看一些建议吗?我们都运行Windows 7,虽然我有64位版本,但我不认为这应该有所作为,尤其是在程序开始运行之后。对部署的c#程序进行故障排除

有关从哪里开始寻找的建议?

编辑 我的解决方案依赖于不出现,直到this.Show()命令(我猜)的节目,在失败的自定义控制库。有没有办法来检查,如果这不包括在内,但由于它是建立在我的电脑上,所以参考在那里工作?我问,因为发布按钮只是将我的项目命名,而不是整个解决方案,但是当我构建它时可以在我的计算机上正常工作,并且项目将库设置为其依赖项中的依赖项。

+1

您是否在应用程序中实施了日志功能?如果没有,那么这样做不会对你有利,因为这对长期发展是明智的。 –

+0

看事件日志,有没有消息? –

+0

您是否正在使用任何不附带标准.NET运行时框架的外部库?如果是这样,所有这些都安装在目标计算机上? –

回答

2

我建议你看看Windows事件查看器。最有可能的是,它包含一些关于崩溃的有用信息。此外,您可以按照How to: Set Up Remote Debugging中的说明远程调试您的应用程序。这是我会做的。此外,请尝试通过订阅Application.UnhandledException和AppDomain的UnhandledException事件来捕获应用程序中引发的所有异常。这将允许您获取调用堆栈。

+0

事件查看器shoudl我们要走了吗?在应用程序下,我的子视图是无线局域网,思科,硬件,IE,密钥管理,媒体中心,微软,微软Office Alerts和Windows PowerShell,其中没有一个听起来相当有趣...... – humanstory

+1

Windows日志 - >应用程序 – platon

+0

有一个。由于未处理的异常和KernelBase.dll上的应用程序错误导致它关闭的.NET Runtime - 猜测呢? – humanstory

0

你的目标CPU是什么?也许你已经将它设置为x64,并且你的客户端运行在Windows 7的32位版本上。

+0

针对32位,程序启动它只是不会使它全部进入。 – humanstory

2

如果您可以对应用程序进行更改,那么您可以尝试记录使用Trace输出引发的任何异常,或使用log4net等专用记录程序长期记录。同样,使用DependencyWalker查看依赖关系可能会很有用 - 如果您在运行时加载了程序集,则可能仍然存在64位问题,您可能会遇到着名的“BadImageFormat”异常。

如果你可以,我还会设置一个Win 7 32位虚拟机来模拟“干净”机器上的客户端环境,这可能有助于重现问题。

编辑澄清跟踪配置:

你可以在你的app.config中添加跟踪侦听器:

<system.diagnostics> 
    <trace autoflush="true" indentsize="4"> 
     <listeners> 
      <add name="LogFileWriter" type="System.Diagnostics.TextWriterTraceListener" initializeData="C:\logs\FooApp.log"/> 
     </listeners> 
    </trace> 
</system.diagnostics> 

这将导致在你的程序中的所有语句Trace.Write()写日志(前提是您有权写入配置的文件夹)。

+0

你能链接一个资源吗?我用try/catch包围了整个MainWindow(默认对象)构造函数,应该在C驱动器上打印一个文件的异常,但没有喜悦。 – humanstory

+1

@humanstory:添加了跟踪配置 – BrokenGlass

0
  1. 添加日志可能,并且(如果它尚未)和“建筑师”,它至少为“简单”“详细”记录,其中:

    简单:只需公共信息stirng,你将可能需要阅读

    详细:只是everythign就可以了,或者有meanning登录(取决于您的应用程序)

  2. 确保您登录处理的例外s并且能够通过标准订阅AppDomain来处理未处理。
  3. 在每个窗口显示()和OnClosing()方法添加的(至少在其上悬挂的那些)日志
  4. 验证是否OS是一样上你的构建机器上,并在客户端
  5. 如果软件写somethign的地方,确保你有足够的previleges做到这一点(简单的测试,只是问到客户端运行您的程序作为管理员
  6. 如果还是不行启用详细模式,并在客户端上运行的应用程序并很快检查日志。

或更高版本,你会找到的东西,可能会没有直接说明你的问题,但一定会帮助你找到解决它正确的方式。

问候。

2

从关于Excel Interop正在使用我的评论MSDN。这可能很明显,但无论如何。

  1. 您必须在您的系统上安装Excel为此代码才能正常运行。

  2. 要使用COM互操作,您必须具有管理员或高级用户安全权限。有关安全性的更多信息,请参阅.NET Framework安全性。

在他们例如,它们所使用的下面的代码。在你的启动代码中添加一个类似的检查可能会很好。 (注意:我从来没有用过这个东西,所以我对它知之甚少,它纯粹是评论和一些在MSDN上搜索的主角)。

0

在与您的情况几乎相似的情况下,我曾经帮助过的一种方法是在系统内部安装DebugView,并部署应用程序的调试版本(here's how to trace and debug from C#)。

DebugView将显示您的程序发出的所有调试消息,这可能会使您很容易找出问题所在。

安装DebugView和您的应用程序后,客户端将运行DebugView,确保捕获活动,然后运行您的应用程序。您的所有调试消息(发送到System.Diagnostics.Debug)将显示在DebugView中,然后可以由客户端将其保存到文件并发送给您进行分析。