为什么简单的控制台应用程序需要管理权限?
program LTUpdate;
{$APPTYPE CONSOLE}
begin
WriteLn('Hello World');
end.
Run Code Online (Sandbox Code Playgroud)
你好世界
项目中是否有某个复选框将应用程序设置为需要管理权限?
(最终的程序将连接到数据库,获取一些字段并在其他地方更新它,现在我可以通过 VCL 来完成......但我想这次我应该尝试一个简单的控制台应用程序。)
根据如何创建用户定义的服务,您可以使用 Windows NT 资源工具包创建 Windows 服务。例如如上面链接所示:
C:\Program Files\Resource Kit\Instsrv.exe Notepad C:\Program Files\Resource Kit\Srvany.exe
Run Code Online (Sandbox Code Playgroud)
但这在 Windows 7 或 10 以及 64 位平台上不起作用,因为 Windows NT 资源工具包不适用于较新的 Windows 版本。我能够使用此批处理文件创建 Windows 服务:
sc create "MyService" binPath= "C:\Program Files (x86)\MyProg\myprog.exe" start= auto DisplayName= "My Service" obj= LocalSystem
Run Code Online (Sandbox Code Playgroud)
但它不会启动 Windows 服务。当我尝试启动时,我收到以下消息:
Windows 无法在本地计算机上启动 OrchestrateIT Import Service 服务。
错误1053:服务未及时响应启动或控制请求。
使用 Windows 命令提示符安装 Windows 服务?中的信息 并 从可执行文件创建 Windows 服务不起作用。
如何成功启动Windows服务?
windows-services batch-file command-prompt windows-7 windows-10
我for
在 Delphi 中编写了一个简单的循环并将其翻译为 Julia。与 Julia 程序相比,Delphi 程序的执行时间简直可怜:Julia 快了 7 倍 -查看程序和结果。
我试图弄清楚这是如何可能的,因为 Delphi 应该是地球上最快的语言之一!
我想将 Julia 生成的 ASM 代码与 Delphi 生成的 ASM 代码进行比较。在 Delphi 中,我只需单击一下即可获取该代码。在哪里可以看到 Julia 中特定函数的 ASM 代码?
using BenchmarkTools
println("----------- Test for loops")
# test for loops
function for_fun(a)
total = 0
big = 0
small = 0
for i in 1:a
total += 1
if i > 500000
big += 1
else
small += 1
end
end
return (total, small, big)
end
res_for …
Run Code Online (Sandbox Code Playgroud) 我有一个基类TThread
,它有像TThreadSock
andTThreadPool
这样的子类,它覆盖了该.Terminate()
方法。这些孩子的孩子(如TThreadSockDownload
或TThreadPoolCollect
)继承了这些.Terminate()
方法(甚至可能覆盖它们):
type
TThreadSock= class( TThread )
procedure Terminate; // Hides TThread.Terminate
end;
TThreadSockDownload= class( TThreadSock );
TThreadSockUpload= class( TThreadSock )
procedure Terminate; // Hides TThreadSock.Terminate
end;
TThreadPool= class( TThread )
procedure Terminate; // Hides TThread.Terminate
end;
TThreadPoolCollect= class( TThreadPool );
Run Code Online (Sandbox Code Playgroud)
我的问题是:我有一个可以包含所有内容的列表,所以最常见的分母是TThread
. 从那个基类我需要调用最“幼稚”的.Terminate()
方法。目前我的方法是这样的:
var
oThread: TThread;
begin
oThread:= GetNextThread();
if oThread is TThreadSockDownload then TThreadSockDownload(oThread).Terminate() else
if oThread is TThreadSockUpload then TThreadSockUpload(oThread).Terminate() else …
Run Code Online (Sandbox Code Playgroud) 我从 ThoughtCo 网站上得到了下面的代码。(Zarko Gajic) - 当鼠标指针位于菜单项中时,它会在鼠标指针附近显示提示:
但是,它有一个错误:当通过键盘打开菜单时,无论鼠标指针在屏幕上的位置如何,工具提示都会出现在鼠标指针旁边:
我尝试通过添加注释行来修复该错误。现在的错误是,无论您是否快速单击菜单项,提示总是出现。
如何解决这个问题?
procedure TfrmPrincipal.WMMenuSelect(var Msg: TWMMenuSelect);
var
menuItem : TMenuItem;
hSubMenu : HMENU;
hPopupWnd: HWND; // Added
R: TRect; // Added
Pt: TPoint; // Added
begin
inherited;
menuItem := nil;
if (Msg.MenuFlag <> $FFFF) or (Msg.IDItem <> 0) then
begin
if Msg.MenuFlag and MF_POPUP = MF_POPUP then
begin
hSubMenu := GetSubMenu(Msg.Menu, Msg.IDItem);
menuItem := Self.Menu.FindItem(hSubMenu, fkHandle);
end
else
begin
menuItem := Self.Menu.FindItem(Msg.IDItem, fkCommand);
end;
end;
hPopupWnd := FindWindow('#32768', nil); // Added
if …
Run Code Online (Sandbox Code Playgroud) 我正在使用 WMI 来获取所有磁盘信息,如驱动器、驱动器号等,但我还没有找到如何获取每个分区的 UUID/GUID。
我很想知道某些行末尾显示的代码标记(参见屏幕截图)是否在任何地方进行了解释或记录(对于 RAD Studio 10.4)。我注意到,当这些项目以单位名称为前缀时,前 3 个(for Halt
、Continue
and )将会消失。Break
System.
至于raise
,我不清楚红色向上小箭头的含义或应如何解决。代码编译良好,没有错误、警告或提示。
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
begin
if False then Halt(99);
for I := 0 to 2 do
begin
if I = 0 then Continue;
if I = 1 then Break;
end;
try
Transaction.StartTransaction;
//update database
Transaction.Commit;
except
Transaction.Rollback;
raise;
end;
end;
Run Code Online (Sandbox Code Playgroud)
我正在将一个非常旧的组件转换为 Delphi 12,并且偶然发现了我不记得以前见过的语法。代码有点像这样:
someBoolean := key in [^H, #32..#255];
Run Code Online (Sandbox Code Playgroud)
我知道它正在测试key
指定的 ANSI 字符集是否匹配或在范围内,但到底是什么^H
?H
如果我更改为A
, , B
Delphi似乎很乐意编译该行C
或 ,1
。该行在 Delphi 12 和 Delphi 7 下编译。我似乎找不到任何有关此的信息。这似乎是一个非常古老的语法,可能来自 Pascal 时代。有人能解释一下吗?
我在 Delphi 7 中准备了这个测试代码:
procedure TForm1.Button1Click(Sender: TObject);
var
c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15: AnsiChar;
begin
c1 := ^A;
c2 := ^B;
c3 := ^C;
c4 := ^D;
c5 := ^E;
c6 := ^F;
c7 …
Run Code Online (Sandbox Code Playgroud) 我有一个用 Delphi XE5 编写的 Windows 服务应用程序,StartType
设置为stAuto
. 有没有办法让服务检测它是在启动时自动启动还是手动启动?我有一个单独的管理器程序来执行安装、启动、停止和卸载。该服务需要知道启动是否来自管理器。我可以让经理在手动启动之前创建一个注册表项并将其用作我的测试,但想知道是否有更干净的解决方案。
Ctrl当我用+评估变量时F7,使用简单变量就可以了。但是,当我有更复杂的事情时:
...有什么方法可以显示与这些值对应的字段名称吗?
delphi ×9
batch-file ×1
char ×1
code-editor ×1
continue ×1
debugging ×1
disk ×1
guid ×1
hint ×1
ide ×1
julia ×1
manifest ×1
menu ×1
pascal ×1
polymorphism ×1
service ×1
uac ×1
windows-10 ×1
windows-7 ×1
wmi ×1