- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 Delphi 以编程方式检测 Lazarus IDE 是否安装在系统中的正确方法是什么?
例如,要检测是否安装了 Delphi 7,我可以检查此键 HKLM\Software\Borland\Delphi\7.0
。
我在 Windows 注册表中搜索 Lazarus 的类似 key ,但没有找到任何内容。
最佳答案
Lazarus 存储一个名为 environmentoptions.xml
的文件默认在 <user name>\Local Settings\Application Data\lazarus
文件夹(在某些情况下,该文件可以位于其他文件夹中)。该文件包含获取 Lazarus IDE 位置以及 IDE 使用的 FPC(Free Pascal 编译器)所需的所有信息。
environmentoptions.xml
文件看起来像这样
<?xml version="1.0"?>
<CONFIG>
<EnvironmentOptions>
<Version Value="106"/>
<LazarusDirectory Value="C:\lazarus\">
<History Count="1">
<Item1 Value="C:\lazarus\"/>
</History>
</LazarusDirectory>
<CompilerFilename Value="C:\lazarus\fpc\2.2.4\bin\i386-win32\fpc.exe">
<History Count="3">
<Item1 Value="C:\fpc\2.2.4\bin\i386-win32\fpc.exe"/>
<Item2 Value="C:\lazarus\fpc\2.2.4\bin\i386-win32\fpc.exe"/>
<Item3 Value="C:\lazarus\fpc\2.4.2\bin\i386-win32\fpc.exe"/>
</History>
</CompilerFilename>
<FPCSourceDirectory Value="c:\lazarus\fpc\2.2.4\source\">
<History Count="1">
<Item1 Value="c:\lazarus\fpc\2.2.4\source\"/>
</History>
</FPCSourceDirectory>
<MakeFilename Value="C:\lazarus\fpc\2.2.4\bin\i386-win32\make.exe">
<History Count="2">
<Item1 Value="C:\fpc\2.2.4\bin\i386-win32\make.exe"/>
<Item2 Value="C:\lazarus\fpc\2.2.4\bin\i386-win32\make.exe"/>
</History>
</MakeFilename>
<TestBuildDirectory Value="C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\">
<History Count="3">
<Item1 Value="C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\"/>
<Item2 Value="C:\temp\"/>
<Item3 Value="C:\windows\temp\"/>
</History>
</TestBuildDirectory>
<BackupProjectFiles AdditionalExtension="bak" MaxCounter="9"/>
<BackupOtherFiles AdditionalExtension="bak" MaxCounter="9"/>
<Debugger Class="TGDBMIDebugger" EventLogLineLimit="100"/>
<DebuggerFilename Value="c:\lazarus\mingw\bin\gdb.exe">
<History Count="4">
<Item1 Value="c:\lazarus\mingw\bin\gdb.exe"/>
<Item2 Value="/usr/bin/gdb"/>
<Item3 Value="/usr/local/bin/gdb"/>
<Item4 Value="/opt/fpc/gdb"/>
</History>
</DebuggerFilename>
<Recent>
<OpenFiles Max="10" Count="10">
</OpenFiles>
<ProjectFiles Max="5" Count="5">
</ProjectFiles>
<PackageFiles Max="10" Count="1">
<Item1 Value="C:\Librerias\Indy10\Lib\indylaz.lpk"/>
</PackageFiles>
</Recent>
<ExternalTools Count="0"/>
<CharcaseFileAction Value="Ask"/>
<CompilerMessagesFilename Value=""/>
</EnvironmentOptions>
<ObjectInspectorOptions ShowHints="False" InfoBoxHeight="50">
<Version Value="3"/>
<ComponentTree>
<Height Value="97"/>
</ComponentTree>
</ObjectInspectorOptions>
</CONFIG>
因此确定 Lazarus IDE 是否安装在 Windows 系统中所需的步骤是
确定 <user name>\Local Settings\Application Data\lazarus
的位置使用 SHGetSpecialFolderLocation
功能与 CSIDL_LOCAL_APPDATA
值。
解析文件environmentoptions.xml
找到LazarusDirectory
键下EnvironmentOptions
根。
现在,通过 Lazarus IDE 的位置,您可以检查 lazarus.exe
是否存在。该文件夹中的文件。
检查此示例应用程序,其中总结了此答案中的所有步骤。
{$APPTYPE CONSOLE}
uses
ShlObj,
ComObj,
ActiveX,
Classes,
Windows,
Variants,
SysUtils;
function GetLocalAppDataFolder : string;
const
CSIDL_LOCAL_APPDATA = $001C;
var
ppMalloc : IMalloc;
ppidl : PItemIdList;
begin
ppidl := nil;
try
if SHGetMalloc(ppMalloc) = S_OK then
begin
SHGetSpecialFolderLocation(0, CSIDL_LOCAL_APPDATA, ppidl);
SetLength(Result, MAX_PATH);
if not SHGetPathFromIDList(ppidl, PChar(Result)) then
RaiseLastOSError;
SetLength(Result, lStrLen(PChar(Result)));
end;
finally
if ppidl <> nil then
ppMalloc.free(ppidl);
end;
end;
function GetLazarusLocalFolder : string;
begin
Result:=Format('%slazarus',[IncludeTrailingPathDelimiter(GetLocalAppDataFolder)]);
if not DirectoryExists(Result) then
Result:='';
end;
function FileToString(const FileName: TFileName): AnsiString;
var
Stream : TFileStream;
begin
Stream:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
try
try
SetLength(Result, Stream.Size);
Stream.Read(Pointer(Result)^, Stream.Size);
except
Result:='';
end;
finally
Stream.Free;
end;
end;
function GetLazarusFolder : string;
var
LocalFolder : TFileName;
FileName : TFileName;
XmlDoc : OleVariant;
Node : OleVariant;
begin
Result:='';
LocalFolder:=GetLazarusLocalFolder;
if LocalFolder<>'' then
begin
FileName:=IncludeTrailingPathDelimiter(LocalFolder)+'environmentoptions.xml';
if FileExists(FileName) then
begin
XmlDoc := CreateOleObject('Msxml2.DOMDocument.6.0');
try
XmlDoc.Async := False;
XmlDoc.LoadXML(FileToString(FileName));
XmlDoc.SetProperty('SelectionLanguage','XPath');
if (XmlDoc.parseError.errorCode <> 0) then
raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
Node :=XmlDoc.selectSingleNode('//CONFIG/EnvironmentOptions/LazarusDirectory/@Value');
if not VarIsClear(Node) then
Result:=Node.text;
finally
XmlDoc:=Unassigned;
end;
end;
end;
end;
function IsLazarusInstalled : Boolean;
begin
Result:=FileExists(IncludeTrailingPathDelimiter(GetLazarusFolder)+'lazarus.exe');
end;
begin
try
CoInitialize(nil);
try
Writeln('Lazarus config Folder '+GetLazarusLocalFolder);
Writeln('Lazarus Install folder '+GetLazarusFolder);
Writeln('Is Lazarus Installed '+BoolToStr(IsLazarusInstalled,True));
Readln;
finally
CoUninitialize;
end;
except
on E:Exception do
begin
Writeln(E.Classname, ':', E.Message);
Readln;
end;
end;
end.
关于delphi - 检测已安装的 lazarus IDE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5379679/
当我在新计算机上打开现有的 Lazarus IDE 项目时,它不想进行编译。源编辑器中会弹出一个包含此代码的窗口 program C05e01p; {$mode objfpc}{$H+} uses
我开始在Lazarus IDE中开发项目,但我不适应新平台。如何在项目中导入音频媒体,图像,视频和其他资源,然后使用它们(无需使用操作系统的特定目录)。 利用相同的情况,创建一个zip文件类型并将其导
在花了很多时间之后 ''' procedure Tf100.lvListCustomDrawItem(Sender: TCustomListView; Item: TListItem; State
为什么这段代码不会导致编译器错误?我预计会出现错误,例如“对“CallMe”的调用不明确”。这是编译器或语言中的错误吗?这可以通过使用单元名称和函数调用前面的点来解决,但这不能保护用户代码和库代码免受
我正在尝试使用 synapse 在 lazarus 中创建 https 服务器,但失败了。我想让我的服务器接收来自其他 https 客户端的数据。我正在使用 https://localhost:150
我们使用的是摩托罗拉 MC3100 移动数据终端、条码扫描器。运行Windows CE6.0 为了对这些进行编程,我们打算使用 Lazarus/FPC,实际上我们已经制作了一个可以在设备上运行的测试应
我正在将 Delphi 应用程序移植到 FPC/Lazarus,该应用程序在启动屏幕中显示信息。当单元具有初始化部分时,该初始化部分会调用类似以下内容的内容: Splash.Info(unit_nam
我必须在主线程的上下文中执行一些代码。我使用的是Lazarus + FPC。我从 DLL(如果在 Linux 上是共享库)内的线程接收到一个事件,并且我的回调函数被调用。请注意,此函数不是任何类的成员
我想使用内置的TSimpleIPCServer在Lazarus中创建一个简单套接字服务器。 我不想使用任何其他框架或产品! 该组件上似乎没有任何文档。我在网上浏览了所有内容,但找不到任何示例。 最佳答
我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。 我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的
召集所有FreePascal和/或Lazarus大人物!! 查看标记为[FPC]或[Lazarus]的大部分问题,我们会发现Marco van de Voort可以回答大多数问题... But why
我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。 我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的
我想在 Raspberry Pi 上使用 Lazarus 进行开发,但直到现在我还不能。 Here我读过这个: 在 Raspbian 操作系统中,很容易安装 Lazarus 和 Free Pascal
我正在使用 Lazarus IDE 在 Linux 系统上编写程序。该程序应该连接到 Internet 或 Intranet。所以,我想向用户显示他们可以用来连接到 Internet 或 Intran
这里只是这个问题的后续问题 => link是否可以将 TabSheet 标题的文本颜色更改为另一种颜色(例如白色)并将字体样式更改为“粗体”? 最佳答案 也许这会给你这样的灵感。再次请注意,这仅适用于
我有一个使用 Lazarus 构建的程序。 我想在没有 Lazarus 的机器上运行它。这可能吗?如果是这样,我如何确定要放在新计算机上的依赖项? 注意:我不热衷于制作安装程序或类似的东西。我只想在没
时尚指南? 除了 http://wiki.freepascal.org/Coding_style是否有风格指南代表 Lazarus(和/或 FPC 和/或 Delphi)或某种广泛共识所遵循的风格。
我正在使用 Lazarus 构建一个应用程序,我在其中使用 sqlite 数据库来存储数千条记录。现在我正在通过 sqlite3.dll 动态链接到 sqlite 库。 是否可以静态链接到它?我在哪里
每次我使用 raise Exception.create('...'); 时,它都会显示与 Delphi 不同的以下框: [my message] Press OK to ignore and ris
我在 TForm1.FormDropFiles 中遇到了一个非常奇怪的问题。 我已附上整个项目。我无法定位问题。 执行项目后,会显示form1,并显示系统托盘图标,当将文件拖放到form1上时,会显示
我是一名优秀的程序员,十分优秀!