使用SmartAssembly自动记录错误并终止应用程序

时间:2013-10-11 13:56:24

标签: obfuscation error-reporting redgate smartassembly

我正在使用SmartAssembly进行常规代码混淆以及应用程序中的错误报告。

如果我的应用程序遇到未处理的异常,我希望记录异常,然后在没有任何用户交互的情况下终止应用程序。是否可以创建一个允许这个的SmartAssembly项目?

我已经尝试在SmartAssembly GUI中设置项目,并且在the command-line上没有运气。下面是我尝试过的命令和参数,但到目前为止,我无法确定如何终止应用程序并在没有用户输入的情况下记录错误。

创建SA项目:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj  input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=standard;continueonerror=false,email:"my@email.com"
/reportprojectname="Shell" 
/reportcompanyname="My Company"

构建项目:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj

2 个答案:

答案 0 :(得分:2)

SmartAssembly包含一些自定义ErrorReportingTemplates的示例,
位于Red Gate/SmartAssembly 6/SDK/Exception Reporting/

这些例子归为几类:

Without UI Standard Custom UI Via Email Secured Proxy Silverlight Silverlight Basic

在每个文件夹中,都有一个.csproj文件,可以扩展该文件以获得所需的结果。 在Without UI文件夹中是我们追求的项目,标题为Sample 01 - Without User Interface.csproj

如果您刚刚使用.dll并且不关心可重复使用的解决方案,请直接编辑此文件并使用生成的.dll文件(替代方法是创建新项目,并引用SmartAssembly.SmartExceptionsCore)。

编辑OnReportException函数,如下所示:

protected override void OnReportException(ReportExceptionEventArgs e)
    {
        for (int i=0; i<3; i++)
        {
            if (e.SendReport()) break;
        }
        e.TryToContinue = false;
        System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
        proc.Kill();
    }

Here's a Gist of the final result,如果你感到困惑。

使用GUI或通过cmd创建项目文件:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" 
/create shell.saproj  input=C:\Repositories\MyApp\src\shell.exe 
/output=shell.exe 
/reportappname="MyTestApp" 
/errorreportingtemplate=MySmartAssemblyLogger.dll;continueonerror=false,email:"my@email.com"
/reportprojectname="Shell" 
/reportcompanyname="My Company"

使用GUI或通过cmd进行构建:

"C:\Program Files\Red Gate\SmartAssembly 6\SmartAssembly.com" /build shell.saproj

答案 1 :(得分:0)

根据网站http://www.red-gate.com/supportcenter/Content/SmartAssembly/help/6.7/SA_UsingTheCommandLine

上的示例

您应该将“standard”替换为“auto”,并且应该在没有出现用户对话框的情况下发送错误报告。