在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然后手动检查那些无法映射的?
我目前正在尝试创建一个内置在我的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中有一个Windows服务的服务名称,我也知道如何从中获取句柄.我需要做的是停止服务,如果由于某种原因停止失败,我需要终止与服务相关的进程.问题是我有多个服务从同一个可执行文件运行,所以我不能使用可执行文件名来终止进程.这意味着我需要进程ID来终止正确的关联进程.如何从服务名称或句柄中获取此id或某种方式来终止正确的进程?