小编Ben*_*ley的帖子

Rhino Mocks - 正确使用Arg <T> .Ref

我在查找RhinoMocks中Arg选项的正确参数时遇到了问题.

我试图模拟具有ref Int32参数的MSIRecordGetString方法.目前我有:

_Api.RecordGetString(Arg<IntPtr>.Is.Anything,
                     Arg<Int32>.Is.Anything, 
                     Arg<StringBuilder>.Is.Anything, 
                     ref Arg<Int32>.Ref( ???, 0).Dummy);
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道什么??? 应该/可以替换.我知道它应该是AbstractConstraint类型的东西,但我不确定什么是有效的.难以找到正确使用的任何示例.

干杯.

c# unit-testing rhino-mocks

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

有谁知道一个好的MSI日志查看器?

相当简单的问题,有没有人知道浏览msi日志文件的良好效用?

对任何提供过滤的东西感兴趣,可以看到不同的标准和自定义操作,动作排序,属性和错误.

谢谢.

installer windows-installer wix

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

SQL 2000/2005/2008 - 查找列的唯一约束名称

我有一个表的列需要数据类型升级.但是,由于未命名的唯一约束,运行任何alter脚都会导致错误.

我需要放弃这个约束但不幸的是我不知道这个名字.我有一个脚本,它目前列出了表上的所有唯一约束,但我需要找到如何更进一步,并将约束名称与列相关联.

Select *
From sysobjects
Where sysobjects.xtype = 'UQ' AND sysobjects.parent_obj= OBJECT_ID(N'Users')
Run Code Online (Sandbox Code Playgroud)

这回来了

UQ__Users__45F365D3
UQ__Users__46E78AOC
Run Code Online (Sandbox Code Playgroud)

我需要知道这些列链接到哪些列才能删除正确的列.我需要支持SQL 2000,2005和2008.

任何建议,将不胜感激.

谢谢Ben

sql sql-server sql-server-2005 sql-server-2000 sql-server-2008

3
推荐指数
1
解决办法
5719
查看次数

Wix - 如何获取注册表项的默认值

相当直截了当的问题但似乎无法在网上找到一个例子.

目前我有以下wix片段,虽然在hkcr.gz注册表项中设置了默认值,但只是将PREV_GZ_DEFAULT_APP设置为空白字符串.

<Property Id="PREV_GZ_DEFAULT_APP">
   <RegistrySearch Id="Current_GZ_DEFAULT_APP"
                  Root="HKCR"
                  Key=".gz"
                  Name="(Default)"
                  Type="raw" />
</Property>
Run Code Online (Sandbox Code Playgroud)

任何人都知道这段代码有什么问题吗?

installer windows-installer wix

3
推荐指数
1
解决办法
1792
查看次数

NUnit - 断言异常和属性

我想断言抛出异常,然后检查抛出异常的一些属性.

我的印象是我可以做以下事情:

ICommand command = CreateCommandObj();
Assert.That( () => command.DoWork(), Throws.TypeOf<ArgumentException>(),                        
                     Has.Property("ParamName").EqualTo("myParam") &
Has.Property("Message").EqualTo("myMessage") );
Run Code Online (Sandbox Code Playgroud)

然而,这甚至没有编译和查看Assert的预期参数.我看不出我怎么能这样做?我确定我以前用过这个......

注意上面是一个人为的例子来说明这一点,忽略我正在寻找一个除了任何参数之外的方法的ArgumentException的事实:)

任何帮助赞赏.

1)无法将lambda表达式转换为'object'类型,因为它不是委托类型.

c# nunit unit-testing

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

使用MSIEnumRelatedProducts和MSIGetProductInfo的MSI Interop

在使用MSI Interop API时,我遇到了一些导致应用程序崩溃的异常行为.这很简单,可以"处理"问题,但我想更多地了解"为什么"这种情况正在发生.

我对MSIEnumRelatedProducts的第一次调用返回值0并正确地将我的字符串缓冲区设置为productcode.我的理解是,只有当给定的升级代码(作为parm传递给方法)当前安装了"相关的系列产品"时才会发生这种情况,否则它将返回259 ERROR_NO_MORE_ITEMS.

但是,当我随后使用相同的产品代码调用MSIGetProductInfo时,我得到返回值1605,"此操作仅对当前安装的产品有效.".

在这种情况下,有没有人有任何想法?它在一台机器上是100%可重复的,但我还没有设法在另一台机器上获得再现步骤.

我们所有的产品都使用Wix属性"AllUsers = 1"构建,因此应该为所有用户安装产品,而不仅仅是一个.

任何想法/建议表示赞赏.

谢谢Ben

更新: 我注意到在运行问题msi包时记录了以下行:

MSI(s)(88:68)[12:15:50:235]:FindRelatedProducts:无法读取产品'{840C ... etc ..... 96}'的ASSIGNMENTTYPE信息.跳绳...

有谁知道这可能意味着什么?

更新:代码示例.

do
{
   result = _MSIApi.EnumRelatedProducts(upgradeCode.ToString("B"), 0, 
                                        productIndex, productCode);
   if (result == MSIApi.ERROR_BAD_CONFIGURATION ||
       result == MSIApi.ERROR_INVALID_PARAMETER ||
       result == MSIApi.ERROR_NOT_ENOUGH_MEMORY)
   {
      throw new MSIInteropException("Failed to check for related products", 
                                     new Win32Exception((Int32)result));
   }

   if(!String.IsNullOrEmpty(productCode.ToString()))
   {
      Int32 size = 255;
      StringBuilder buffer = new StringBuilder(size);
      Int32 result = (Int32)_MSIApi.GetProductInfo(productCode, 
                             MSIApi.INSTALLPROPERTY_VERSIONSTRING, 
                             buffer, 
                             ref size);

      if (result != MSIApi.ERROR_SUCCESS)
      {               
         throw new MSIInteropException("Failed …
Run Code Online (Sandbox Code Playgroud)

c# c++ winapi windows-installer

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