0

我遇到了与该问题相同的问题,但在这种情况下,该问题仅发生在某些 PC(用户笔记本电脑)上,而不发生在其他 PC(台式机)上。此外,其他安装程序中存在相同的代码,但他们也从未在笔记本电脑或台式机上遇到此问题。所以我的问题的随机性与最初讨论的问题不同,它总是失败

调用的代码是

export prototype LaunchDocReader(STRING);

///////////////////////////////////////////////////////////////////////////////
// Function: LaunchDocReader()
// Purpose:  This function is used to display a document using the default
//           application registered with this doc type.
///////////////////////////////////////////////////////////////////////////////
function LaunchDocReader(szFileName)
    SHELLEXECUTEINFO ExecInfo;
    STRING  szVerb;                            
    BOOL    bRes;
begin   
    bRes = FALSE;
    szVerb = "open";

    if (UseDLL("Shell32") = 0) then
        ExecInfo.cbSize = SizeOf(ExecInfo);
        ExecInfo.fMask = SEE_MASK_ALL;
        ExecInfo.hwnd = NULL;
        ExecInfo.lpVerb = &szVerb;
        ExecInfo.lpFile = &szFileName;
        ExecInfo.lpParameters = NULL;
        ExecInfo.lpDirectory = NULL;
        ExecInfo.nShow = SW_SHOWNORMAL;
        ExecInfo.hInstApp = 0;
        ExecInfo.lpIDList = 0;
        ExecInfo.lpClass = 0;
        ExecInfo.hkeyClass = 0;
        ExecInfo.dwHotKey = 0;
        //ExecInfo.hIcon = 0;
        //ExecInfo.DUMMYUNIONNAME.hIcon = 0;
        ExecInfo.hProcess = 0;
        bRes = ShellExecuteEx(&ExecInfo);
        if (bRes = TRUE) then
            // The document launcher was successful.
            WaitForSingleObject(ExecInfo.hProcess, INFINITE);       
            MsiCloseHandle(ExecInfo.hProcess);
        endif;
    
        UnUseDLL("Shell32");    
    endif;
    return bRes;
end;

从阅读其他讨论来看,这段代码似乎是正确的——还要记住,它大部分但并不总是成功。它总是通过 InstallShield 调用

if !(CMDLINE % "NoReadme") then 
    if (FALSE = bStopReadMePopUp) then
        SdShowMsg("Displaying ReadMe. Please close the document to continue.", TRUE);

        if (FindFile(SRCDIR, "readme.doc", szResult) == 0) then
            szReadMe = "\"" + SRCDIR ^ "readme.doc\"";
        endif;

        if (!(LaunchDocReader(szReadMe))) then
            My_AddToLog("Open Readme Failed \n");
        endif;

        SdShowMsg("", FALSE);

       // After viewing the read-me find out if the user wants to continue.
       // Display the AskYesNo dialog box.  The default is set to Yes. 
       if (NO = AskYesNo("Do you wish to continue with this setup?", YES)) then 
         // Exit the install
       abort;
       endif;
   endif;
endif;

该文档已通过 PC 上定义的用于处理 Word 文档的实用程序成功打开(在所有情况下都是 MS Word)但在关闭文档后,安装挂起并出现对话框“显示自述文件。请关闭文档以继续”永远不会关闭。这意味着即使在自述文件关闭之后,WaitForSingleObject 也不会关闭。我还尝试使用不同的方法关闭它,即通过文件 -> 关闭,也只是选择文档顶部 RHS 侧的 X 选项卡,但这没有区别。并且安装永远不会进入到打开 AskYesNo 对话框的下一个阶段。

如上所述,此问题仅发生在某些用户笔记本电脑上,但是当在同一台笔记本电脑上调用具有相同代码序列的不同安装程序时,它是成功的。

所以我不知道是什么导致了这个失败。给予的任何帮助将不胜感激。提前致谢。

4

0 回答 0