小编Kri*_*erA的帖子

从一个用户导入xml字符串的DSA密钥失败.权限?安装破损?坏KSP?

用户最近在使用我的软件时报告了一个奇怪的错误.我使用DSA签名来验证许可证.当软件导入公钥以验证签名时,DSA提供程序的FromXmlString方法将抛出CryptographicException,其描述为" 密钥无法在指定状态下使用 ".

从System.Security.Cryptography.Utils.CreateProvHandle调用的_OpenCSP方法似乎返回NTE_BAD_KEY_STATE(0x8009000b).这是第一次有人向我报告此错误,并且该代码多年来没有变化.

造成这种情况的可能原因是什么?屏蔽权限错误?CAPI安装破损?被.net信任/权限设置阻止?密钥存储提供商存储的垃圾,还是KSP向cryptoapi返回意外的东西?

我已经搜索了错误代码/说明/等,但没有找到任何真正的答案,可能会导致这个...

失败的代码的隔离版本在这里:http: //forum.huagati.com/getattachment.ashx?fileid = 78

using System;
using System.Security.Cryptography;
using System.Reflection;

public class Test
{
  public static void Main()
  {
    try
    {
      string key = "<DSAKeyValue><P>wrjxUnfKvH/1s5cbZ48vuhTjflRT5PjOFnr9GeUPZSIoZhYATYtME4JRKrXBtSkyioRNtE1xgghbGAyvAJ5jOWw88fLBF+P1ilsZyq72G1YcbB+co8ImQhAbWKmdCicO9/66Th2MB+7kms/oY3NaCzKEuR7J3b23dGrFpp4ccMM=</P><Q>xmxoSErIJCth91A3dSMjC6yQCu8=</Q><G>bwOLeEaoJHwSiC3i3qk9symlG/9kfzcgrkhRSWHqWhyPAfzqdV1KxJboMpeRoMoFr2+RqqKHgcdbzOypmTeN4QI/qh4nSsl5iEfVerarBOrFuRdOVcJO0d8WE233XQznd1K66nXa5L8d9SNZrM6umZ1YuBjhVsTFdPlIXKfGYhk=</G><Y>wZnEEdMUsF3U3NBQ8ebWHPOp37QRfiBn+7h5runN3YDee1e9bC7JbJf+Uq0eQmU8zDs+avEgD68NpxTKEHGr4nQ3rW6qqacj5SDbwO7nI6eN3wWrVhvrWcQm0tUO93m64HsEJREohfoL+LjqgrqIjZVT4D1KXE+k/iAb6WKAsIA=</Y><J>+zmcCCNm2kn1EXH9T45UcownEe7JH+gl3Lw2lhVzXuX/dYp5sGCA2lK119iQ+m3ogjOuwABATCVFLo6J66DsSlMd0I8WSD5WKPvypQ7QjY0Iv71J2N0FW0ZXpMlk/CE8zq4Z7arM1N564mNe</J><Seed>QDrZrUFowquY5Uay8YtUFOXnv28=</Seed><PgenCounter>Gg==</PgenCounter></DSAKeyValue>";

      DSACryptoServiceProvider csp2 = new DSACryptoServiceProvider();
      csp2.FromXmlString(key);

      Console.WriteLine("Success!");
    }
    catch (Exception ex)
    {
      int hResult = 0;
      try
      {
          PropertyInfo pi = typeof(Exception).GetProperty("HResult", BindingFlags.NonPublic | BindingFlags.Instance);
          hResult = (int)pi.GetValue(ex, null);
      }
      catch (Exception ex2)
      {
          Console.WriteLine("HResult lookup failed: " + ex2.ToString());
      }
      Console.WriteLine("Initializing CSP …
Run Code Online (Sandbox Code Playgroud)

.net c# cryptography cryptoapi dsa

28
推荐指数
1
解决办法
6014
查看次数

刷新DBML图表?

真的很愚蠢的问题,对不起,但我无法在谷歌上找到它(我确定它是在截屏视频或某个地方).我有一个DBML(linq2sql类)图,我已经更改了底层数据库.在VS2008中,如何"刷新"图表?没有View - > Refresh或RightClick-> Refresh或Update选项.

现在,我每次更新底层数据库时都必须重新创建整个linq2sql类.

visual-studio-2008 linq-to-sql

12
推荐指数
2
解决办法
7854
查看次数

在winforms应用程序中托管的MSIEs WebBrowser控件以兼容模式运行

我以winforms形式主持MSIE.不幸的是,它坚持在兼容模式下运行,无论我是否在独立IE中给它一个在IE8模式下运行的页面.这样做的结果是,在独立的MSIE中正确呈现的某些内容在托管控件中完全错位并混乱.

除了文档类型等,还有一些神奇的方法告诉webbrowser我希望它以与在独立的MSIE中加载它相同的方式呈现页面吗?

I don't want to use the registry key override ( http://blogs.msdn.com/b/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx ) due to my form being part of an add-in for another app. I don't want to change the IE behavior for the main app and I don't want to change it for other add-ins running under that app. I only want this to work within the browser hosted in my form, not app-wide and not process-wide.

internet-explorer webbrowser-control internet-explorer-8 winforms ie8-compatibility-mode

9
推荐指数
1
解决办法
4999
查看次数

在迭代器中的finally块中引用异常

有没有办法在迭代器函数或属性中的finally块内引用异常,允许try..finally而不是try..catch

我不会用它来改变或搞乱控制流,但是希望能够在finally块中获得对异常的引用(如果有人被抛出),以便从中读取并且可能将内容添加到Data成员.

我理解由于编译器从迭代器生成类的性质,可能不可能/允许出于同样的原因,首先不允许在yield语句周围使用try..catch.但是我仍然希望有一些方法(甚至是丑陋的技巧)来控制异常.

简化示例:

IEnumerable<SomeClass> Something
get
{
  try
  {
    throw new SomeException();
    yield return new SomeClass();
  }
  finally
  {
    Exception ex = ... // <= TODO - get hold of the exception here [if one was thrown]...
  }
}
Run Code Online (Sandbox Code Playgroud)

c# ienumerable

8
推荐指数
2
解决办法
1397
查看次数

为什么在WCF反序列化器初始化对象时不调用我的抽象基类的构造函数?

标题中的问题...简而言之 - 我有一个WCF服务公开返回实体类的操作.客户端类继承自抽象基类而不是默认的System.Object.抽象基类定义了默认构造函数.当调用其中一个服务方法时,我希望在datacontract序列化器实现返回的对象时调用构造函数.但是,不会调用构造函数.另一方面,如果我自己创建实体类的实例,则调用抽象类构造函数.

为什么,为什么,是否有解决方法?或者我错过了什么 - 是否有另一个构造函数签名由datacontract序列化程序在实现对象时调用?如果没有,datacontract序列化程序如何在不调用构造函数的情况下实现对象,就像"new SomeClass()"调用一样?或者我今天喝了太多咖啡(到目前为止只有2或3杯)?

c# wcf serialization

7
推荐指数
1
解决办法
1204
查看次数

在网络服务帐户下发布到WMI时的权限问题

我正在将WMI发布添加到基于.net framework 3.5的Windows服务,该服务在"网络服务"帐户下运行.

根据我在MSDN上遇到文档,"网络服务"帐户默认情况下应具有WMI发布权限.(" 默认情况下,允许以下用户和组发布数据和事件:... 网络服务,...... ")

但是,当服务调用Instrumentation.Publish(myStatusClassInstance)时,它会抛出DirectoryNotFoundException;

System.IO.DirectoryNotFoundException was unhandled
Message: Could not find a part of the path 'C:\Windows\system32\WBEM\Framework\root\MyWMINamespace\MyService_SN__Version_1.0.3686.26280.cs'.
Run Code Online (Sandbox Code Playgroud)

..所以它看起来像System.Management.Instrumentation试图动态生成代码,并在网络服务下运行时,它的目标是网络服务没有权限的目录.

对此最好的解决方法/解决方法是什么?我可以在app.config或代码中覆盖代码生成目标目录吗?我不想在部署服务时不得不摆弄文件系统权限......

更新:我认为这是一个"功能",旧版FX代码与Win7中较新的安全设置冲突.在内部,WMI托管类从注册表中检索WMI安装目录,并将其用作生成代码的输出路径.不幸的是,许多用户不允许(或者应该)在%SystemRoot%下写东西......我提交了一个连接错误(#530392),看看MSFT是否可以带来任何清晰度和/或提供修复或解决方法.

更新2:我猜测对于普通用户帐户来说这不是问题,因为UAC虚拟化将启动并将文件存储在其他位置.但是,UAC虚拟化显然不包含"网络服务"帐户.(?)

更新3:增加了550pt赏金.简单约束:基于.net framework 3.5的Windows服务,作为网络服务运行,需要能够使用Win7和Win2008 [RTM&R2]上的System.Management.Instrumentation以默认权限/安全设置通过WMI发布数据,而无需求助于使用反射修改框架内部/私有成员."开箱即用",但欢迎干净的解决方案.如果SO允许,将打开第二个相关的赏金Q作为另一个550pt的占位符.

赏金更新:我打算通过第二个手持问题将这个Q的赏金加倍,这个问题将作为一个赏金占位符:
https://stackoverflow.com/questions/2208341/bounty-placeholder (< - 显然这个是不允许的,因此SO礼仪警察关闭了赏金占位符问题.)

更新4:这变得越来越好.我注意到installutil正在将丢失的文件写入c:\ windows\syswow64 ...等等......所以我意识到我使用的是32位版本的installutil来安装服务,但该服务是作为一个服务运行的64位进程.显而易见的副作用是,在installutil运行时生成的代码最终在syswow64(32位系统目录)下生成,而服务在64位系统目录(system32)下查找它.(< - 关闭主题,但我真的很喜欢MSFT如何设法切换那里的名字...... :)).

所以我尝试使用64位版本的installutil安装该服务.在%sysroot%\ wbem\framework ... etc ... path中,权限错误失败了.接下来,我将服务重新编译为x86,并使用32位版本的installutil再次注册它.这导致了一个全新的例外:

System.Exception: The code generated for the instrumented assembly failed to compile.
   at System.Management.Instrumentation.InstrumentedAssembly..ctor(Assembly assembly, SchemaNaming naming)
   at System.Management.Instrumentation.Instrumentation.Initialize(Assembly assembly)
   at …
Run Code Online (Sandbox Code Playgroud)

permissions wmi uac windows-7

7
推荐指数
1
解决办法
3863
查看次数

挑战:让Linq-to-Entities生成不错的SQL而不需要不必要的连接

我最近在msdn的实体框架论坛上遇到了一个问题:http: //social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/bb72fae4-0709-48f2-8f85-31d0b6a85f68

提出问题的人试图做一个相对简单的查询,涉及两个表,一个分组,一个顺序,以及一个使用Linq-to-Entities的聚合.一个非常简单的Linq查询,并且在SQL中也很简单 - 人们每天都想做的事情.

但是,当使用Linq-to-Entities时,结果是一个复杂的查询,有很多不必要的连接等.我试过它,如果只使用纯Linq,就无法让Linq-to-Entities从中生成一个不错的SQL查询针对EF实体.

从EF看到了相当多的怪物查询我认为可能是OP(以及我和其他人)做错了什么.也许有更好的方法来做到这一点?

所以这是我的挑战:使用来自EF论坛的示例并仅针对这两个实体使用Linq-to-Entities,是否可以让EF生成SQL查询而无需不必要的连接和其他复杂性?

我希望看到EF生成的东西更接近Linq-to-SQL对同类查询所做的事情,同时仍然使用Linq对抗EF模型.

限制:使用EFv1 .net 3.5 SP1或EFv4(beta 1是VS2010/.net4 beta的一部分,可从Microsoft下载).没有CSDL-> SSDL映射技巧,模型'definitionsqueries',存储过程,数据库端函数或允许的视图.只是在模型和数据库之间进行简单的1:1映射,以及执行MSDN上原始线程所要求的纯L2E查询.两个实体之间必须存在关联(即我对原始线程的"解决方法#1"答案不是有效的解决方法)

更新: 500pt赏金添加.玩得开心.

更新:如上所述,使用EFv4/.net 4(β1或更高版本)的解决方案当然有资格获得赏金.如果您使用.net 4postβ1,请包含内部版本号(例如4.0.20605),您使用的L2E查询以及它生成并发送到数据库的SQL.

更新:此问题已在VS2010/.net 4 beta 2中得到修复.虽然生成的SQL仍然有一些[相对无害]额外的嵌套级别,但它不会执行以前的任何坚果.SQL Server优化器完成后的最终执行计划现在已经尽可能好了.+++为负责EFv4的SQL生成部分的家伙和dudettes ...

linq-to-entities entity-framework

5
推荐指数
1
解决办法
2474
查看次数

如果在同一个树中多次使用WiX DirectorySearch/@ Depth,则会被忽略

我有一个WiX安装程序,可以将一堆扩展文件安装到另一个应用程序的app目录中.为了确保文件最终位于正确的位置,我使用一堆嵌套的DirectorySearch来查找app目录.

该应用程序通常安装在此模式之后的路径中:

\Program Files (x86)\CompanyName\ProductName\[version]\[environment]\[optional intermediate folder]\AppFolderName
Run Code Online (Sandbox Code Playgroud)

换句话说,常见的安装文件夹包括:

\Program Files (x86)\CompanyName\ProductName\1.0\Prod\AppFolderName
\Program Files (x86)\CompanyName\ProductName\1.1\Prod\OptionalFolderName\AppFolderName
\Program Files (x86)\CompanyName\ProductName\1.2\Test\AppFolderName
\Program Files (x86)\CompanyName\ProductName\1.2\Test\OptionalFolderName\AppFolderName
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我使用一组嵌套的DirectorySearch元素来分配Property的路径.如果存在可选文件夹(OptionalFolderName),则以下内容有效:

<Property Id="SOMEAPPFOLDER">
  <DirectorySearch Id="ProgramFilesFolder" Path="[ProgramFilesFolder]">
    <DirectorySearch Id="CompanyNameFolder" Path="CompanyName">
      <DirectorySearch Id="ProductFolder" Path="ProductName">
          <DirectorySearch Id="EnvironmentFolder" Path="$(var.ENVIRONMENTNAME)" Depth="2">
            <DirectorySearch Id="OptionalIntermediateFolder" Path="OptionalFolderName">
              <DirectorySearch Id="AppFolder" Path="AppFolderName" AssignToProperty="yes">
                <FileSearch Id="AppNameExe" Name="AppName.exe" MinVersion="$(var.MIN_VERSION).0" MaxVersion="$(var.MAX_VERSION).999" />
              </DirectorySearch>
            </DirectorySearch>
        </DirectorySearch>
      </DirectorySearch>
    </DirectorySearch>
  </DirectorySearch>
</Property>
Run Code Online (Sandbox Code Playgroud)

但是,由于OptionalFolderName是可选的,我想使用DirectorySearch来确定app文件夹是直接位于环境文件夹下还是一个级别.为了做到这一点,我将搜索树更改为:

<Property Id="SOMEAPPFOLDER">
  <DirectorySearch Id="ProgramFilesFolder" Path="[ProgramFilesFolder]">
    <DirectorySearch Id="CompanyNameFolder" Path="CompanyName">
      <DirectorySearch Id="ProductFolder" Path="ProductName">
        <DirectorySearch Id="EnvironmentFolder" Path="$(var.ENVIRONMENTNAME)" Depth="2">
          <DirectorySearch Id="AppFolder" Path="AppFolderName" Depth="2" AssignToProperty="yes">
            <FileSearch Id="AppNameExe" Name="AppName.exe" …
Run Code Online (Sandbox Code Playgroud)

windows-installer wix wix3.7

5
推荐指数
1
解决办法
1071
查看次数

用于优化LINQ to SQL查询的工具和技术

我有几个LINQ to SQL查询,我觉得需要花费很多时间.我可以使用哪些工具和技术来首先找到:

  1. 他们需要多长时间以及是否有改进的空间
  2. 找出我可以改变的内容,并轻松测试这些更改是否有效

工具,技术和阅读资源都将受到赞赏(ergo up-voted;))

.net sql sql-server performance linq-to-sql

4
推荐指数
2
解决办法
2259
查看次数

MSIE8兼容模式无法呈现动态创建的表

有点奇怪......如果在IE8怪癖模式下运行或在兼容性视图模式下运行,则由以下代码添加的表不会呈现.任何人都可以告诉我为什么,因为这对我来说并不明显......?

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script>
function AddTable()
{
  var table = document.createElement('table');
  var row = document.createElement('tr');
  table.appendChild(row);
  var cell = document.createElement('td');
  cell.innerHTML='abc';
  row.appendChild(cell);
  var divContainer = document.getElementById('divContainer');
  divContainer.appendChild(table);
}
</script>
</head>
<body>
<div id='divContainer'>
</div>
<input type='button' value='add table' onclick='javascript:AddTable()' />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

html quirks-mode internet-explorer-8

2
推荐指数
2
解决办法
2176
查看次数