在用于为我的软件构建互联网软件更新服务的Delphi应用程序中,Windows 7 UAC系统请求用户授权运行exe.代码中存在以下可能存在争议/风险的区域:
在添加UAC未激活的这些项目之前,依次删除每个单元引用,然后以裸骨骼exe结束仍然会导致UAC事件 - 因此无法说明导致它的原因.除此之外,Delphi 2007现在需要以管理员身份启动,以启动应用程序的调试过程.
问题1:除了在新的exe中从头开始之外,我怎样才能看到导致这种情况的原因-IOW是否有一个我可以查看的日志
问题2:使用authenticode使用签名的exe仍然会导致显示UAC警报
试图获取一个文件名:
procedure TSomeClass.GetFileName(AData : string) : string;
var
p : pchar;
begin
p := pchar(AData);
while not (p^ in ['/', '&', '#', ':']) do
inc(p);
result := p;
end;
Run Code Online (Sandbox Code Playgroud) 使用WM_COPYDATA将命令行参数传递给另一个使用Delphi XE的应用程序实例,如下所示:
function DAppInstance.SendParamsToPrevInstance(AWindowHandle: THandle): Boolean;
var
copyData: TCopyDataStruct;
cmdParams : string;
i : integer;
begin
cmdParams := '';
for i := 1 to ParamCount do
cmdParams := cmdParams + ParamStr(i); //#1
//cmdParams := cmdParams + '"' + ParamStr(i) + '" '; //#2
//cmdParams := cmdParams + format('"%s" ', [ParamStr(i)]); //#3
//cmdParams := cmdParams + format('%s;', [ParamStr(i)]); //#4
copyData.lpData := pchar(cmdParams);
copyData.cbData := 1 + (bytelength(cmdParams));
copyData.dwData := WaterMark; //ID for APP
result := SendMessage(AWindowHandle,
WM_COPYDATA,
Application.Handle,
LPARAM(@copyData)) = 1; …Run Code Online (Sandbox Code Playgroud) 尝试构建基于接口和泛型的图并获得奇怪的错误 - 请注意错误行中"整数"一词的大小写差异.
文本解析器传递给Graph实现,然后由Graph调用以构建其基本数据结构.进一步的IGraphConstructor对象可以构建更复杂的实际图形,而不仅仅是填充基本字典.
IGraphConstructor<K,V> = interface
function Construct(AData : TObjectDictionary<K,V>) : boolean;
end;
IGraph<K,V> = interface
['{B25EEE1F-3C85-43BB-A56B-3E14F7EA926C}']
function Construct(AConstructor : IGraphConstructor<K,V>) : boolean;
function GetNodes : TObjectDictionary<K,V>;
property Nodes : TObjectDictionary<K,V> read GetNodes;
end;
TGraph<K,V> = class(TComponent, IGraph<K,V>)
private
FData : TObjectDictionary<K,V>;
function GetNodes : TObjectDictionary<K,V>;
...
//the editor
TVirtualEditor = class(TComponent)
private
FGlyphs : TGraph<integer,TGlyph>;
...
TTextParser<integer,TGlyph> = class(TInterfacedObject, IGraphConstructor<integer,TGlyph>)
...
Run Code Online (Sandbox Code Playgroud)
和...
function TVirtualEditor.Edit(AText: string): boolean;
var
parser : TTextParser<integer,TGlyph>;
begin
parser := TTextParser<integer,TGlyph>.Create(AText);
result := FGlyphs.Construct(parser);
end; …Run Code Online (Sandbox Code Playgroud) 当形式A是模态的并且它显示第二个模态形式B,并且B的模态结果被设置而B然后关闭时,A也被关闭.
如何防止这种情况?