我们有一个WPF应用程序,其中部分可能会在运行时抛出异常.我想全局捕获任何未处理的异常并记录它们,但是否则会继续执行程序,好像什么也没发生(有点像VB On Error Resume Next
).
这可能在C#中吗?如果是这样,我究竟需要将异常处理代码放在哪里?
目前我看不到任何可以包装a try
/ catch
around的单点,哪些可以捕获可能发生的所有异常.即便如此,由于捕获,我会留下任何被执行的东西.或者我在这里想到可怕的错误方向?
ETA:因为下面有很多人指出:该申请不是用于控制核电厂.如果它崩溃了并不是什么大问题,但是大多数与UI相关的随机异常在它将被使用的上下文中是一种麻烦.有(也可能仍然是)其中一些,因为它使用插件架构,可能会被其他人扩展(在这种情况下也是学生;所以没有经验丰富的开发人员能够编写完全无错误的代码).
至于被捕获的异常:我将它们记录到日志文件中,包括完整的堆栈跟踪.这就是这项工作的重点.只是为了对抗那些在字面上对VB的OERN进行类比的人.
我知道盲目忽略某些类错误是危险的,可能会破坏我的应用程序实例.如前所述,这个程序对任何人来说都不是关键任务.在他们正确的思想中没有人会打赌人类文明的存在.它只是一个用于测试某些设计方法的小工具.软件工程.
为了立即使用该应用程序,异常可能会发生很多事情:
对于程序生成的实验数据:严重错误最坏的情况是不会导致数据被记录.稍微改变实验结果的微妙变化是不太可能的.即使在这种情况下,如果结果看起来很可疑,则会记录错误; 如果它是一个完整的异常值,那么仍然可以丢弃该数据点.
总结一下:是的,我认为自己仍然至少部分理智,我不认为一个全局异常处理例程让程序运行必然是完全邪恶的.如前所述,根据申请,这样的决定可能是有效的.在这种情况下,它被认为是一个有效的决定,而不是完全和彻底的废话.对于任何其他应用程序,决策可能看起来不同 但请不要因为我们忽视错误而指责我或其他从事该项目的人可能会炸毁这个世界.
附注:该应用程序只有一个用户.数百万人使用的不是像Windows或Office这样的东西,在这种情况下,向用户提供异常泡沫的成本本来就是非常不同的.
我猜你不能这样做:
$servicePath = $args[0]
if(Test-Path -path $servicePath) <-- does not throw in here
$block = {
write-host $servicePath -foreground "magenta"
if((Test-Path -path $servicePath)) { <-- throws here.
dowork
}
}
Run Code Online (Sandbox Code Playgroud)
那么如何将我的变量传递给scriptblock $ block?
当我从脚本运行下面的行时,文件最终会在我的本地计算机上创建.
$cred = Get-Credential domain\DanTest
Enter-PSSession -computerName xsappb01 -credential $cred
New-Item -type file c:\temp\blahxsappk02.txt
exit-pssession
Run Code Online (Sandbox Code Playgroud)
当我从powershell控制台单独运行每一行时,将正确创建远程会话,并在远程计算机上创建该文件.有什么想法吗?时间问题是脚本也许吗?
我一直在阅读关于delphi中with关键字的坏事,但在我看来,如果你不过度使用它.它可以使您的代码看起来很简单.
我经常将所有TClientDataSets和TField都放在TDataModules中.所以在我的表单中我有这样的代码
procedure TMyForm.AddButtonClick(Sender: TObject);
begin
with LongNameDataModule do
begin
LongNameTable1.Insert;
LongNameTable1_Field1.Value := "some value";
LongNameTable1_Field2.Value := LongNameTable2_LongNameField1.Value;
LongNameTable1_Field3.Value := LongNameTable3_LongNameField1.Value;
LongNameTable1_Field4.Value := LongNameTable4_LongNameField1.Value;
LongNameTable1.Post;
end
end;
Run Code Online (Sandbox Code Playgroud)
如果没有with关键字,我必须编写这样的代码
procedure TMyForm.AddButtonClick(Sender: TObject);
begin
LongNameDataModule.LongNameTable1.Insert;
LongNameDataModule.LongNameTable1_LongNameField1.Value := "some value";
LongNameDataModule.LongNameTable1_LongNameField2.Value :=
LongNameDataModule.LongNameTable2_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField3.Value :=
LongNameDataModule.LongNameTable3_LongNameField1.Value;
LongNameDataModule.LongNameTable1_LongNameField4.Value :=
LongNameDataModule.LongNameTable4_LongNameField1.Value;
LongNameDataModule.LongNameTable1.Post;
end;
Run Code Online (Sandbox Code Playgroud)
我认为使用with关键字更容易阅读.
我应该避免使用with关键字吗?
如何在C#中暂停整个过程(就像我点击Suspend时的Process Explorer一样).
我正在使用Process.Start启动Process,并且在某个事件上,我想暂停该进程以便能够对其"快照"进行一些调查.
我正在做这篇文章中描述的将保存文件保存在安全文件中的内容,因此我们的自动化过程可以使用它通过Invoke-command运行远程PS脚本:http: //blogs.technet.com/b/robcost/archive/2008 /05/01/powershell-tip-storing-and-using-password-credentials.aspx
当我在我的帐户下运行时,这很有效 - 密码从加密文件中读取,传递给Invoke-command,一切都很好.
今天,当我的脚本准备好它的黄金时间时,我试图在自动进程将使用的Windows帐户下运行它,并在我的脚本尝试从文件中读取安全密码时遇到此错误:
ConvertTo-SecureString : Key not valid for use in specified state.
At \\remoted\script.ps1:210 char:87
+ $password = get-content $PathToFolderWithCredentials\pass.txt | convertto-sec
urestring <<<<
+ CategoryInfo : InvalidArgument: (:) [ConvertTo-SecureString], C
ryptographicException
+ FullyQualifiedErrorId : ImportSecureString_InvalidArgument_Cryptographic
Error,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
Run Code Online (Sandbox Code Playgroud)
要求我的同事在他的帐户下运行,他也得到了同样的错误.
这是我用来保存凭据的代码:
$PathToFolderWithCredentials = "\\path\removed"
write-host "Enter login as domain\login:"
read-host | out-file $PathToFolderWithCredentials\login.txt
write-host "Enter password:"
read-host -assecurestring | convertfrom-securestring | out-file $PathToFolderWithCredentials\pass.txt
write-host "*** Credentials have been saved to $pathtofolder ***"
Run Code Online (Sandbox Code Playgroud)
这是脚本中的代码,由自动进程运行以读取它们以在Invoke-command中使用:
$login= get-content …
Run Code Online (Sandbox Code Playgroud) 我们在Word文档上发生了并发编辑,我想确保Subversion可以处理合并的.doc文件.你知道Subversion是否能很好地处理Word文档的合并?
有没有合理的方法从不依赖于COM自动化的Word文件中提取纯文本?(这是部署在非Windows平台上的Web应用程序的一项功能 - 在这种情况下是不可协商的.)
Antiword似乎可能是一个合理的选择,但似乎它可能会被抛弃.
Python解决方案是理想的,但似乎不可用.
我们有一个批处理文件来调用我们基于MSBuild的构建过程.句法:
build App Target [ Additional MSBuild Arguments ]
Run Code Online (Sandbox Code Playgroud)
在内部,它这样做:
msbuild.exe %1.msbuild /t:%2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)
这导致对MSBuild的调用如下所示:
msbuild.exe App.msbuild /t:Target
当任何参数包含等号时=
,Powershell会完全删除它. 我的批处理脚本永远不会看到它 标准cmd.exe
命令提示符不会发生这种情况.
例如,如果我打电话
build App Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)
这是传递给MSBuild的内容:
msbuild.exe App.msmbuild /t:Target /p:Property Value
Run Code Online (Sandbox Code Playgroud)
我期待这个:
msbuild.exe App.msbuild /t:Target "/p:Property=Value"
Run Code Online (Sandbox Code Playgroud)
我尝试过Powershell转义字符,标准的命令提示符转义字符,甚至是我编写的东西:
build App Target "/p:Property=Value"
build App Target '/p:Property=Value'
build App Target /p:Property^=Value
build App Target /p:Property`=Value
build App Target /p:Property==Value
Run Code Online (Sandbox Code Playgroud)
它都不起作用. 我怎么办才能让等号不被删除或删除?
如果使用-File参数调用,Powershell将在发生错误时返回0退出代码.这意味着我的构建是绿色的,它不应该是:(
例如:
(在wtf.ps1中)
$ErrorActionPreference = "Stop";
$null.split()
Run Code Online (Sandbox Code Playgroud)
(CMD)
powershell -file c:\wtf.ps1
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
+ CategoryInfo : InvalidOperation: (split:String) [], ParentConta
insErrorRecordException
+ FullyQualifiedErrorId : InvokeMethodOnNull
echo %errorlevel%
0
powershell c:\wtf.ps1
You cannot call a method on a null-valued expression.
At C:\wtf.ps1:3 char:12
+ $null.split <<<< ()
+ CategoryInfo : InvalidOperation: (split:String) [], ParentConta
insErrorRecordException
+ FullyQualifiedErrorId : InvokeMethodOnNull
echo %errorlevel%
1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
(我已经尝试了前两页的每个想法:https://www.google.co.uk/search?q …
powershell ×5
c# ×2
ms-word ×2
.net ×1
batch-file ×1
credentials ×1
delphi ×1
exception ×1
exit-code ×1
merge ×1
python ×1
scriptblock ×1
svn ×1
wpf ×1