主要问题是您使用nginx.conf
文件名。您需要完全限定的文件名(带有驱动器和目录)。如果该文件与您的 EXE 位于同一目录中,您应该这样做
ShellExecute(Handle, nil,
PChar(ExtractFilePath(Application.ExeName) + 'nginx.conf'),
nil, nil, SW_SHOWNORMAL)
无需设置目录,一般应使用SW_SHOWNORMAL
.
此外,这仅在运行应用程序的系统为文件正确设置文件关联时才有效.conf
。如果运行应用程序的系统.conf
使用 MS Paint 打开文件,则上面的行将启动 MS Paint。如果根本没有关联,则该行将不起作用。
您可以手动指定使用notepad.exe
:
ShellExecute(Handle, nil, PChar('notepad.exe'),
PChar(ExtractFilePath(Application.ExeName) + 'nginx.conf'),
nil, SW_SHOWNORMAL)
现在我们开始notepad.exe
并将文件名作为第一个参数传递。
第三,你不应该像try..except
现在这样使用。可能由于“无效配置路径”以外的其他原因而ShellExecute
失败,并且在任何情况下,它都不会引发异常。相反,考虑
if FileExists(...) then
ShellExecute(...)
else
MessageBox(Handle, 'Invalid path to configuration file', 'Error', MB_ICONERROR)
现在,回到主要问题。我的第一个代码片段仅在运行您的应用程序的系统恰好有一个适当的文件关联.conf
文件时才有效,而第二个代码片段将始终打开记事本。更好的选择可能是使用用于打开.txt
文件的应用程序。大卫的回答举了一个例子。