Microsoft发布到社区的操作系统(通常是基于安全性的)修补程序和修补程序通常由我理解的一系列更新的DLL或其他二进制文件组成.
Microsoft和其他类似公司如何确保这些修补程序不会相互冲突?他们是否总是采用累积修补程序方法,其中单个修补程序将包含以前修补程序中的所有修补程序?这并不似乎是这种情况,因为许多修补程序似乎集中在固定的具体问题.如果它们是重点修补程序,它们如何防止一个修补程序丢弃另一个修补程序(例如,彼此安装不兼容的DLL).
我一直钦佩微软管理这个过程的能力.我工作的公司要小得多,而且几年前我在修补程序上工作时,我们总是采用累积方法,其中一个补丁立即取代所有先前基于该版本的补丁.这意味着补丁的大小逐渐变大,直到下一个"官方"版本发布.
管理补丁依赖项有哪些好的做法?
大多数关于虚拟内存的文献都指出,作为一名应用程序开发人员,了解虚拟内存可以帮助我利用其强大的功能.我曾经参与过在Linux上开发应用程序,但在编写代码时并不关心虚拟内存的复杂性.我错过了什么吗?如果是这样,请详细说明我如何利用虚拟内存的工作原理.如果我对这个问题没有意义,请告诉我!
我试图使用Visual Studio 2005中的ATL简单对象向导在我的DLL中创建一个新的COM对象.
我输入对象的短名称,并导出所有其他字段.
但是,当我在向导中单击" 下一步 "时,会出现以下错误消息:
Object 'IXxxInterfaceName' already exists
Run Code Online (Sandbox Code Playgroud)
我已经搜索了我的整个解决方案,以获取对IXxxInterfaceName的所有引用,并且无法在任何地方看到它的定义.
向导如何确定它已经存在?
我正在尝试调试我的代码中似乎是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页面似乎没有提供很多见解.
我有几个预感:
关于为什么这个电话会失败的任何想法?
我正在使用的应用程序表现出以下行为:
在特定的高内存操作期间,任务管理器(内存使用情况统计)下的进程的内存使用量达到大约2.5GB的峰值(注意:已设置注册表项以允许此操作,因为通常最大为2GB对于32位Windows下的进程)
操作完成后,进程大小缓慢开始以每秒1MB的速率降低.
我试图找出最简单的方法来快速确定谁释放了这个内存,以及它在哪里被释放.
我无法将内存分析器附加到我的代码中,我并不特别想覆盖new/ delete运算符来跟踪分配/解除分配(IOW,我想这样做而不重新编译我的代码).
任何人都可以提供有关如何通过Visual Studio调试器执行此操作的任何有用建议吗?
更新
我还应该提到它是一个多线程应用程序,因此暂停应用程序并通过调试器分析调用堆栈并不是最理想的选择.我考虑一次冻结一个不同的线程,看看内存是否停止减少,但我相当肯定这会导致应用程序崩溃.
我们在现场有各种版本的基础应用程序:
我们通过安装程序分发更新,安装程序在其中嵌入.NET可执行文件.运行此安装程序的PC可能具有以下基本应用程序的组合:
我需要确保安装程序中嵌入的.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)
几个问题:
这是否意味着它将使用.NET Framework 4.0(如果存在),否则将使用.NET Framework 3.5(或任何以前使用2.0.50727CLR的框架)?IOW,这些标签按优先级排序吗?
构建计算机上的.NET Framework版本是否对应用程序有任何运行时影响,或者app.config文件中的版本的硬编码是否始终优先?
如果我添加了依赖于.NET 4.0特有的功能的代码,会发生什么?包含该2.0.50727版本app.config(如上所示)会导致编译时错误或运行时错误(仅当未安装.NET 4.0时)?
我编写了以下控制台应用程序来测试静态属性:
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) 注意:这个问题受到这个答案的影响.
以下是有效的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是一个大于我最长字符串的数字.
这编译并按预期工作.
如果编译器在堆栈上分配单个字符串时可以动态地感知字符串长度,为什么不能对字符串数组这样做呢?
编辑:
只是为了澄清,这不是我遇到的现实生活中的编程问题 - 这只是病态的好奇心.
鉴于以下课程:
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 这个事实有关,我已经0在BarBC构造函数中初始化它了?
我试图用来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) c++ ×4
.net ×3
c# ×3
com ×2
aes ×1
atl ×1
c ×1
constructor ×1
cryptography ×1
encryption ×1
hotfix ×1
inheritance ×1
memory ×1
patch ×1
reflection ×1
stack ×1
static ×1
string ×1
virtual ×1
windows ×1
xml ×1