如果用户安装了.Net Framework,如何在Windows注册表中检测到?我不是在寻找基于.Net的解决方案,因为查询来自InnoSetup.
我从阅读Stack Overflow上的另一篇文章了解到.Net Framework是4.0的现场升级.
我已经知道如何检查用户是否在系统上安装了4.0版,即通过检查以下内容:
function FindFramework(): Boolean;
var
bVer4x0: Boolean;
bVer4x0Client: Boolean;
bVer4x0Full: Boolean;
bSuccess: Boolean;
iInstalled: Cardinal;
begin
Result := False;
bVer4x0Client := False;
bVer4x0Full := False;
bVer4x0 := RegKeyExists(HKLM, 'SOFTWARE\Microsoft\.NETFramework\policy\v4.0');
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4 \Client', 'Install', iInstalled);
if (1 = iInstalled) AND (True = bSuccess) then bVer4x0Client := True;
bSuccess := RegQueryDWordValue(HKLM, 'Software\Microsoft\NET Framework Setup\NDP\v4 \Full', 'Install', iInstalled);
if (1 = iInstalled) AND (True = bSuccess) then bVer4x0Full := True;
if (True = bVer4x0Full) …Run Code Online (Sandbox Code Playgroud) 是否可以从TInputQueryWizardPage输入页面(使用CreateInputQueryPage函数创建的页面)有条件地禁用或隐藏编辑框?
我有4个编辑框,我需要根据上一个向导页面的输入禁用/隐藏最后两个.我该怎么做 ?
如何搜索现有的 exe 文件,然后将该目录用于我的安装程序?
如果找不到 exe 文件,我希望用户浏览路径。如果 exe 文件安装在其他地方。
情况 1(最常见的情况):
默认目录是 c:\test\My program
这应该显示为“选择目标位置”页面上的路径。当用户按“下一步”时,应该有一个检查。确保默认目录存在 (c:\test\My program) 如果存在,用户应继续进入“准备安装”页面。
Senario 2(极少数情况):
默认目录是 c:\test\My program
这应该显示为“选择目标位置”页面上的路径。当用户按“下一步”时,应该有一个检查。确保默认目录存在 (c:\test\My program) 如果不存在,则应提示用户输入“My program”的路径。随后,用户应继续进入“准备安装”页面。然后我只相信用户选择了正确的路径
我怎样才能在 InnoSetup 中做到这一点?
我有一个名为ADO的数据库t_codemeaning,下面是表结构:
t_codemeaning
codemenaing_code AS Text
codemenaing_title AS Text
codemenaing_description AS Text
Run Code Online (Sandbox Code Playgroud)
我添加了所有表格ADOQuery1.
我点击了这个Delphi脚本的按钮:
ADOQuery1.edit;
ADOQuery1codemeaning_title.value := edit1.text;
ADOQuery1codemeaning_description.value := memo1.lines.text;
ADOQuery1.post;
Run Code Online (Sandbox Code Playgroud)
当我在备忘录中添加单行时,那么每件事都很好.
但是当我在memo1中添加多行文本时,它会显示一个错误:
多步操作产生错误.检查每个状态值.
如何解决这个问题?
我的最后一个进展,我创建了一个新的字符串变量aValue并将memo1.lines.text添加到其中:
aValue:=memo1.lines.text;
aValue := StringReplace(StringReplace(aValue, '#10', '', [rfReplaceAll]), '#13', '', [rfReplaceAll]);
Run Code Online (Sandbox Code Playgroud)
我将ADOQuery1codemeaning_description.value ....的脚本更改为:
ADOQuery1codemeaning_description.value := aValue;
Run Code Online (Sandbox Code Playgroud)
仍然有同样的错误......
我用这段代码下载小文件:
Var
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
Idhttp1.get('http://mydomain.com/myfile.zip',ms);
ms.SaveToFile('myfile.zip');
ms.Free;
end;
Run Code Online (Sandbox Code Playgroud)
但是文件在存储到磁盘之前保存在RAM中,因此可能难以下载文件> 1Gb,例如.有没有办法按部件下载文件?或者我需要使用WinInet吗?提前致谢!
我想将注册表项设置为HKLM用户是管理员还是HKCU普通用户。
我尝试了这个:
[Registry]
Root: "{code:DefRegRoot}"; Subkey: "Software\MyCompany\MySW\Settings"; ValueType: string; ValueName: "InstallPath"; ValueData: "{app}"
[Code]
function IsRegularUser(): Boolean;
begin
Result := not (IsAdminLoggedOn or IsPowerUserLoggedOn);
end;
function DefRegRoot(Param: String): String;
begin
if IsRegularUser then
Result := HKCU
else
Result := HKLM;
end;
Run Code Online (Sandbox Code Playgroud)
但是编译器在注册表的第一行返回一个错误:
Parameter "Root" is not a valid value.
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
我的用户数据位于用户的文件夹中,例如:C:\ Users \ Administrator \ profile.ini
我知道如何删除它:
[UninstallDelete]
Type: files; Name: "C:\Users\{username}\profile.ini"
Run Code Online (Sandbox Code Playgroud)
问题是我不想默默地删除此文件,我需要通过复选框将最终操作告知最终用户,例如“ []删除用户数据”。如果最终用户检查了该文件,请删除该文件,否则什么也不做。
我有两个问题:
有没有办法获取当前记录用户的文件夹?我认为这不是像我在“ C:\ Users {username} \”上面所做的那样的好方法。但是我找不到这样做的任何常数。
可以在卸载开始时添加一个复选框吗?
我想在SQL数据库中保存字体(FontStyle,FontColor,FontSize),为此,我需要将其保存为字符串。如何将Tfont转换为TString?
我们可以重写一行文本文件,然后保存并关闭它吗?
例如,我需要重写第一行,并保留所有其他行.有没有这样做的功能,还是我必须在更改单行后复制整个文件?
我的文件包含多个thaus和行,我只需要更改第一行.
文件示例:
test;test1;test2
other;other;other
other;other;other
x1000
Run Code Online (Sandbox Code Playgroud)
然后
something;something;something
other;other;other
other;other;other
x1000
Run Code Online (Sandbox Code Playgroud)
明白了吗?我只想保留我的文件,但改变第一行.我可以复制整个文件并在我更改第一行后粘贴它,但我想知道是否有一个方法已经包含在delphi中只能更改文本文件中的特定行.谢谢!
我正在使用Pascal中的简单集,并且只想输出集合的内容.每次运行代码时,我都会收到以下错误消息:'project1.lpr(17,13)错误:无法读取或写入此类型的变量'.
这是我的代码:
program Project1;
{$mode objfpc}{$H+}
uses
sysutils;
type TFriends = (Anne,Bob,Claire,Derek,Edgar,Francy);
type TFriendGroup = Set of TFriends;
Var set1,set2,set3,set4:TFriendGroup; x:integer;
begin
set1:=[Anne,Bob,Claire];
set2:=[Claire,Derek];
set3:=[Derek,Edgar,Francy];
writeln(set1);
readln;
end.
Run Code Online (Sandbox Code Playgroud)
输出集是否有特殊的方法/功能?
谢谢
inno-setup ×5
delphi ×4
.net ×1
delphi-2010 ×1
delphi-7 ×1
delphi-xe2 ×1
freepascal ×1
indy10 ×1
install ×1
memo ×1
ms-access ×1
registry ×1
tadoquery ×1
text-files ×1
wininet ×1