小编Chr*_*s J的帖子

从本地路径或映射路径获取UNC路径

在Delphi中有一个函数ExpandUNCFileName,它接受一个文件名并将其转换为UNC等价物.它扩展了映射驱动器并跳过本地和已扩展的位置.

样品

C:\ Folder\Text.txt - > C:\ Folder\Text.txt
L:\ Folder\Sample.txt - > \\ server\Folder1\Folder\Sample.txt其中L:映射到\\ server\Folder1\
\\服务器\文件夹\ Sample.odf - > \服务器\文件夹\ Sample.odf

有没有一种简单的方法在C#中执行此操作或者我是否必须使用Windows api调用WNetGetConnection然后手动检查那些无法映射的?

c# unc

7
推荐指数
3
解决办法
1万
查看次数

ExceptProc没有在Windows中调用

我目前正在尝试创建一个内置在我的Windows服务中的异常处理程序,在未处理的异常中,它将消息发送到另一个程序.我已经构建了方法并使通信工作,但似乎每次我的程序抛出错误,(我在代码中有一个加注调用来强制它.)windows捕获它而不调用Handler.谁能解释我做错了什么?

简化代码解释:

procedure unhandled();
  begin
    raise Exception.Create('Unhandled');
  end;

procedure ExceptionHandler(ExceptObject: TObject; ExceptAddr: Pointer);
  begin
    WriteLn('Display: ' + Exception(ExceptObject).Message);
    //send Message Here
  end;
Run Code Online (Sandbox Code Playgroud)

我调用此代码来运行它:

WriteLn('Starting');    

ExceptProc := @ExceptionHandler;    

unhandled();
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

开始
显示:未处理

但它只是显示:

开始

然后Windows在大约5秒后返回命令提示符.

为什么处理程序没有被正确调用?

PS我一直在控制台应用程序中运行这些测试进行测试.

编辑:

以下是一些更多信息:

显然,当您有一个已分配的ExceptProc时,您的程序不应抛出正常的运行时217错误.我猜这是Windows正在捕捉的内容,但是我可以看到,我的程序正在抛出运行时错误,我也无法获得ErrorProc来捕获它.

delphi exception-handling exception

4
推荐指数
1
解决办法
741
查看次数

如何从Delphi中的服务名称/句柄中找到进程ID?

我在delphi中有一个Windows服务的服务名称,我也知道如何从中获取句柄.我需要做的是停止服务,如果由于某种原因停止失败,我需要终止与服务相关的进程.问题是我有多个服务从同一个可执行文件运行,所以我不能使用可执行文件名来终止进程.这意味着我需要进程ID来终止正确的关联进程.如何从服务名称或句柄中获取此id或某种方式来终止正确的进程?

delphi windows-services

4
推荐指数
2
解决办法
2万
查看次数