小编Leo*_*Hat的帖子

Microsoft(以及具有大量安装基础的其他软件公司)如何管理补丁依赖项?

Microsoft发布到社区的操作系统(通常是基于安全性的)修补程序和修补程序通常由我理解的一系列更新的DLL或其他二进制文件组成.

Microsoft和其他类似公司如何确保这些修补程序不会相互冲突?他们是否总是采用累积修补程序方法,其中单个修补程序将包含以前修补程序中的所有修补程序?这并不似乎是这种情况,因为许多修补程序似乎集中在固定的具体问题.如果它们是重点修补程序,它们如何防止一个修补程序丢弃另一个修补程序(例如,彼此安装不兼容的DLL).

我一直钦佩微软管理这个过程的能力.我工作的公司要小得多,而且几年前我在修补程序上工作时,我们总是采用累积方法,其中一个补丁立即取代所有先前基于该版本的补丁.这意味着补丁的大小逐渐变大,直到下一个"官方"版本发布.

管理补丁依赖项有哪些好的做法?

patch hotfix

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

虚拟内存

大多数关于虚拟内存的文献都指出,作为一名应用程序开发人员,了解虚拟内存可以帮助我利用其强大的功能.我曾经参与过在Linux上开发应用程序,但在编写代码时并不关心虚拟内存的复杂性.我错过了什么吗?如果是这样,请详细说明我如何利用虚拟内存的工作原理.如果我对这个问题没有意义,请告诉我!

memory virtual memory-management

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

ATL简单对象向导 - "对象Xxx已存在"错误

我试图使用Visual Studio 2005中的ATL简单对象向导在我的DLL中创建一个新的COM对象.

我输入对象的短名称,并导出所有其他字段.

但是,当我在向导中单击" 下一步 "时,会出现以下错误消息:

Object 'IXxxInterfaceName' already exists
Run Code Online (Sandbox Code Playgroud)

我已经搜索了我的整个解决方案,以获取对IXxxInterfaceName的所有引用,并且无法在任何地方看到它的定义.

向导如何确定它已经存在?

c++ com atl visual-studio-2005 visual-studio

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

如何确定对IXMLDOMDocument :: load()的调用失败的原因?

我正在尝试调试我的代码中似乎是XML解析问题.我已将其分离到以下代码段:

HRESULT
CXmlDocument::Load(IStream* Stream)
{
    CComVariant xmlSource(static_cast<IUnknown*>(Stream));
    VARIANT_BOOL isSuccessful;
  * HRESULT hr = m_pXmlDoc->load(xmlSource, &isSuccessful);
    return (hr == S_FALSE) ? E_FAIL : hr;
}
Run Code Online (Sandbox Code Playgroud)

注意: m_pXmlDoc属于该类型CComPtr<IXMLDOMDocument>.

看来IXMLDOMDocument::load()(标有*)的调用失败了 - IOW,它正在返回S_FALSE.

我无法介入load()以确定它失败的原因,因为它是一个COM调用.

这种方法的MSDN页面似乎没有提供很多见解.

我有几个预感:

  • XML格式不正确
  • XML文件太大(大约120MB)
  • 这是一个与内存相关的问题(进程大小在失败时达到> 2GB)
    • 注意:已设置注册表项以允许进程大小如此大,因为WinXP,AFAIK的最大有效进程大小为2GB).

关于为什么这个电话会失败的任何想法?

c++ xml com

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

任何有用的建议,以确定在Win32进程中哪些内存被释放?

我正在使用的应用程序表现出以下行为:

  1. 在特定的高内存操作期间,任务管理器(内存使用情况统计)下的进程的内存使用量达到大约2.5GB的峰值(注意:已设置注册表项以允许此操作,因为通常最大为2GB对于32位Windows下的进程)

  2. 操作完成后,进程大小缓慢开始以每秒1MB的速率降低.

我试图找出最简单的方法来快速确定谁释放了这个内存,以及它在哪里被释放.

我无法将内存分析器附加到我的代码中,我并不特别想覆盖new/ delete运算符来跟踪分配/解除分配(IOW,我想这样做而不重新编译我的代码).

任何人都可以提供有关如何通过Visual Studio调试器执行此操作的任何有用建议吗?


更新

我还应该提到它是一个多线程应用程序,因此暂停应用程序并通过调试器分析调用堆栈并不是最理想的选择.我考虑一次冻结一个不同的线程,看看内存是否停止减少,但我相当肯定这会导致应用程序崩溃.

c++ windows memory-management

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

可在.NET Framework 3.5或4.0上运行的可执行文件

我们在现场有各种版本的基础应用程序:

  • 1.0版捆绑了.NET Framework 3.5
  • 2.0版捆绑了.NET Framework 4.0

我们通过安装程序分发更新,安装程序在其中嵌入.NET可执行文件.运行此安装程序的PC可能具有以下基本应用程序的组合:

  • 版本1.0和版本2.0(.NET 3.5/.NET 4.0)
  • 仅限1.0版(仅限.NET 3.5)
  • 仅限2.0版(仅限.NET 4.0)

我需要确保安装程序中嵌入的.NET可执行文件可靠运行.

我发现的方法建议在app.config文件中添加以下内容:

<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>
Run Code Online (Sandbox Code Playgroud)

几个问题:

  1. 这是否意味着它将使用.NET Framework 4.0(如果存在),否则将使用.NET Framework 3.5(或任何以前使用2.0.50727CLR的框架)?IOW,这些标签按优先级排序吗?

  2. 构建计算机上的.NET Framework版本是否对应用程序有任何运行时影响,或者app.config文件中的版本的硬编码是否始终优先?

  3. 如果我添加了依赖于.NET 4.0特有的功能的代码,会发生什么?包含该2.0.50727版本app.config(如上所示)会导致编译时错误或运行时错误(仅当未安装.NET 4.0时)?

.net c#

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

定义每个子类定义一次的静态属性的最佳方法是什么?

我编写了以下控制台应用程序来测试静态属性:

using System;

namespace StaticPropertyTest
{
    public abstract class BaseClass
    {
        public static int MyProperty { get; set; }
    }

    public class DerivedAlpha : BaseClass
    {
    }

    public class DerivedBeta : BaseClass
    {
    }

    class Program
    {
        static void Main(string[] args)
        {
            DerivedBeta.MyProperty = 7;
            Console.WriteLine(DerivedAlpha.MyProperty); // outputs 7
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

正如此控制台应用程序演示的那样,该MyProperty属性对于BaseClass的所有实例都存在一次.是否有一种模式可以让我定义一个静态属性,它将为每个子类类型分配存储空间?

鉴于上面的示例,我希望所有实例DerivedAlpha共享相同的静态属性,并且所有实例DerivedBeta共享另一个静态属性实例.

我为什么要这样做?

我懒洋洋地初始化具有某些属性的类属性名称集合(通过反射).每个派生类实例的属性名称都是相同的,因此将它存储在每个类实例中似乎很浪费.我不能在基类中使它静态,因为不同的子类将具有不同的属性.

我不想复制在每个派生类中填充集合(通过反射)的代码.我知道一种可能的解决方案是定义在基类中填充集合的方法,并从每个派生类中调用它,但这不是最优雅的解决方案.

更新 - 我正在做的事情的例子

在Jon的要求下,这是我正在尝试做的一个例子.基本上,我可以选择用属性装饰我的类中的[SalesRelationship(SalesRelationshipRule.DoNotInclude)]属性(还有其他属性,这只是一个简化的例子).

public class BaseEntity
{
    // I want this property …
Run Code Online (Sandbox Code Playgroud)

.net c# reflection static

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

为什么编译器不能为字符串数组派生字符串长度?

注意:这个问题受到这个答案的影响.

以下是有效的C代码:

char myString[] = "This is my string";
Run Code Online (Sandbox Code Playgroud)

这将\0在堆栈上分配长度为18(包括字符)的字符串,并为其指定值.

但是,以下内容:

char myStrings[][] = {"My 1st string", "My 2nd string", "My 3rd string"};
Run Code Online (Sandbox Code Playgroud)

无效,给出错误"数组类型具有不完整的元素类型".

所以我必须像这样指定数组:

char myStrings[][20] = {"My 1st string", "My 2nd string", "My 3rd string"};
Run Code Online (Sandbox Code Playgroud)

其中20是一个大于我最长字符串的数字.

这编译并按预期工作.

如果编译器在堆栈上分配单个字符串时可以动态地感知字符串长度,为什么不能对字符串数组这样做呢?

编辑:

只是为了澄清,这不是我遇到的现实生活中的编程问题 - 这只是病态的好奇心.

c string stack memory-management

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

在派生构造函数中访问基本成员时出现问

鉴于以下课程:

class Foo
{
    struct BarBC
    {
    protected:
        BarBC(uint32_t aKey)
            : mKey(aKey)
              mOtherKey(0)

    public:
        const uint32_t mKey;
        const uint32_t mOtherKey;
    };


    struct Bar : public BarBC
    {
        Bar(uint32_t aKey, uint32_t aOtherKey)
            : BarBC(aKey),
              mOtherKey(aOtherKey) // Compile error here
    };
};
Run Code Online (Sandbox Code Playgroud)

我在指出的位置收到编译错误:

error: class `Foo::Bar' does not have any field named `mOtherKey'.
Run Code Online (Sandbox Code Playgroud)

有谁能解释一下?我怀疑这是一个语法问题,因为我的Bar类在类中定义Foo,但似乎无法找到解决方法.

这是简单的公共继承,因此mOtherKey应该可以从Bar构造函数中访问.对?

或者它是与mOtherKeyconst 这个事实有关,我已经0BarBC构造函数中初始化它了?

c++ inheritance constructor

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

无法解密使用AesManaged加密的文件

我试图用来System.Security.Cryptography.AesManaged加密我的.net应用程序中的文件.它需要在嵌入式Linux环境中解密,因此我无法使用.net库.

我目前的代码看起来像这样:

string encPassword = "ABCDABCDABCDABCDABCDABCDABCDABCD";
string sourceFile = "myFile.txt";
string targetFile = "myFile.encrypted.txt";
FileStream fsInput = = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);
FileStream fsOutput = new FileStream(targetFile, FileMode.OpenOrCreate, FileAccess.Write);

CryptoStream cryptoStream = null;

try
{
    byte[] key = Encoding.ASCII.GetBytes(encPasswd);
    byte[] IV = new byte[16];
    Array.Copy(key, 0, IV, 0, 16);

    AesManaged aes = new AesManaged();
    aes.Key = key;
    aes.IV = IV;
    aes.BlockSize = 128;
    aes.KeySize = 256;
    aes.Mode = CipherMode.CBC;

    ICryptoTransform encryptor = aes.CreateEncryptor();

    cryptoStream = new CryptoStream(fsOutput, encryptor, …
Run Code Online (Sandbox Code Playgroud)

.net c# encryption cryptography aes

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