我写的服务需要调用函数SelectDirectory函数,在我的EXE中调用此函数没有任务问题,可是在服务中调用的时候总是先弹出一个错误:C:\Documents and settings\networkservice\桌面 引用了一个不可用的位置....。请问各位,如何让这个错误提示不出现呢?是不是我什么地方调用出现了问题???

解决方案 »

  1.   

    SelectDirectory时,先设一个固定的目录作为默认目录。
    否则会以当前用户的桌面为默认目录,而C:\Documents and settings\networkservice是没有 桌面 目录的
      

  2.   

    我使用了一下函数来实现,错误依旧。
    function BrowseCallbackProc(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
    begin
    case uMsg of
        BFFM_INITIALIZED: SendMessage(Wnd, BFFM_SETSELECTION, 1, lpData);
    end;
    Result := 0;
    end;function BrowsFolder(const Folder: string): string;
    var
    TitleName: string;
    lpItemID: PItemIDList;
    BrowseInfo: TBrowseInfo;
    DisplayName: array[0..MAX_PATH] of char;
    TempPath: array[0..MAX_PATH] of char;
    begin
    Result := Folder;
    FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
    BrowseInfo.hwndOwner := GetActiveWindow;
    BrowseInfo.pszDisplayName := @DisplayName;
    TitleName := '请选择一个目录';
    BrowseInfo.lpszTitle := PChar(TitleName);
    BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
    BrowseInfo.lpfn := BrowseCallbackProc;
    BrowseInfo.lParam := Integer(PChar(Folder));
    lpItemID := SHBrowseForFolder(BrowseInfo);
    if Assigned(lpItemId) then
    begin
        SHGetPathFromIDList(lpItemID, TempPath);
        GlobalFreePtr(lpItemID);
        Result := string(TempPath);
    end
    else
        Result:='';
    end;
      

  3.   

    为BrowseInfo或TempPath设一个肯定存在的初始目录(如c:\)