月度归档: 2016 年 8 月

  • Mono+Jexus部署asp.net mvc5.3报错

    报错信息如下:
    Type not found: ‘System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,System.Web.WebPages.Razor,Version…

    经过咨询一些群友,最后Mr. Seaning提出是Webpages大小写的问题。

    在bin文件夹下有关Webpages的dll, pages都是小写的。这在windows平台上没有问题。但是到了linux下就不行了。解决办法是把Webpages相关的dll的文件名里的Webpages改名为 WebPages,注意P是大写。然后就没问题了。

    注:只在vs2015生成的dll中有这个问题。

    这个项目是用 asp.net mvc5.3 + dapper + npoi,目前在linux + jexus + mono 平台上完美运行。

  • VC创建快捷方式

    VC创建快捷方式

    //得到当前桌面路径
    BOOL GetDesktopPath(TCHAR * pszDesktopPath)
    {
                     LPITEMIDLIST   ppidl = NULL ;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_DESKTOP, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszDesktopPath);
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    //得到快速启动栏的路径
    BOOL GetIEQuickLaunchPath(TCHAR * pszIEQueickLaunchPath)
    {
                     LPITEMIDLIST   ppidl;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_APPDATA, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszIEQueickLaunchPath);
                                     lstrcat (pszIEQueickLaunchPath , _T( "\\Microsoft\\Internet Explorer\\Quick Launch" ));
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    //得到 开始->程序组 的路径
    BOOL GetProgramsPath(TCHAR * pszProgramsPath)
    {
                     LPITEMIDLIST   ppidl;
                     if (SHGetSpecialFolderLocation(NULL , CSIDL_PROGRAMS, &ppidl) == S_OK )
                    {
                                     BOOL flag = SHGetPathFromIDList (ppidl, pszProgramsPath);
                                    CoTaskMemFree(ppidl);
                                     return flag;
                    }
                     return FALSE ;
    }
    
    /*
    函数功能:对指定文件在指定的目录下创建其快捷方式
    函数参数:
    lpszFileName    指定文件,为NULL表示当前进程的EXE文件。
    lpszLnkFileDir  指定目录,不能为NULL。
    lpszLnkFileName 快捷方式名称,为NULL表示EXE文件名。
    wHotkey         为0表示不设置快捷键
    pszDescription  备注
    iShowCmd        运行方式,默认为常规窗口
    */
    
    BOOL CreateFileShortcut(LPCTSTR lpszFileName, LPCTSTR lpszLnkFileDir , LPCTSTR lpszLnkFileName , LPCTSTR lpszWorkDir , WORD wHotkey, LPCTSTR lpszDescription , int iShowCmd = SW_SHOWNORMAL )
    {
                     if (lpszLnkFileDir == NULL)
                                     return FALSE ;
    
                     HRESULT hr;
                     IShellLink      *pLink;  //IShellLink对象指针
                     IPersistFile    *ppf; //IPersisFil对象指针
    
                     //创建IShellLink对象
                    hr = CoCreateInstance(CLSID_ShellLink, NULL , CLSCTX_INPROC_SERVER , IID_IShellLink, (void **)&pLink);
                     if (FAILED (hr))
                                     return FALSE ;
    
                     //从IShellLink对象中获取IPersistFile接口
                    hr = pLink->QueryInterface(IID_IPersistFile, ( void **)&ppf);
                     if (FAILED (hr))
                    {
                                    pLink->Release();
                                     return FALSE ;
                    }
    
                     //目标
                     if (lpszFileName == NULL)
                                    pLink->SetPath( _wpgmptr );
                     else
                                    pLink->SetPath( lpszFileName );
    
                     //工作目录
                     if (lpszWorkDir != NULL)
                    {
                                     //pLink->SetPath(lpszWorkDir);
    
                                    pLink->SetWorkingDirectory( lpszWorkDir );
                    }
    
                     //快捷键
                     if (wHotkey != 0)
                                    pLink->SetHotkey( wHotkey );
    
                     //备注
                     if (lpszDescription != NULL)
                                    pLink->SetDescription( lpszDescription );
    
                     //显示方式
                    pLink->SetShowCmd( iShowCmd );
    
                     //快捷方式的路径 + 名称
                     TCHAR szBuffer[MAX_PATH ];
                     if (lpszLnkFileName != NULL) //指定了快捷方式的名称
                                     wsprintf (szBuffer, _T ( "%s\\%s"), lpszLnkFileDir , lpszLnkFileName );
                     else
                    {
                                     //没有指定名称,就从取指定文件的文件名作为快捷方式名称。
                                     TCHAR *pstr;
                                     if (lpszFileName != NULL)
                                                    pstr = (TCHAR *)wcsrchr(lpszFileName , _T( '\\'));
                                     else
                                                    pstr = (TCHAR *)wcsrchr(_wpgmptr , _T( '\\'));
    
                                     if (pstr == NULL )
                                    {
                                                    ppf->Release();
                                                    pLink->Release();
                                                     return FALSE ;
                                    }
    
                                     //注意后缀名要从.exe改为.lnk
                                     wsprintf (szBuffer, _T ( "%s\\%s"), lpszLnkFileDir , pstr);
                                     int nLen = lstrlen (szBuffer);
                                    szBuffer[nLen - 3] = 'l' ;
                                    szBuffer[nLen - 2] = 'n' ;
                                    szBuffer[nLen - 1] = 'k' ;
                    }
    
                     //保存快捷方式到指定目录下
    
                     //WCHAR  wsz[MAX_PATH];  //定义Unicode字符串
    
                     //MultiByteToWideChar(CP_ACP, 0, szBuffer, -1, wsz, MAX_PATH);
    
                    hr = ppf->Save(szBuffer, TRUE );
    
                    ppf->Release();
                    pLink->Release();
                     return SUCCEEDED (hr);
    
    }

    调用

    TCHAR wszModulePath[MAX_PATH ];
    ::memset(wszModulePath, 0, sizeof (TCHAR )* MAX_PATH);
    GetModuleFileName (NULL , wszModulePath, MAX_PATH);
    PathAppend (wszModulePath, _T ( "..\\"));
    wcscat_s(wszModulePath, _T ("3D绘图宝.exe" ));
    
    TCHAR wszModulePath2[MAX_PATH ];
    ::memset(wszModulePath2, 0, sizeof (TCHAR )* MAX_PATH);
    GetModuleFileName (NULL , wszModulePath2, MAX_PATH);
    PathAppend (wszModulePath2, _T ( "..\\"));
    
    TCHAR   szPath[MAX_PATH ];
    CoInitialize( NULL );
    
    GetProgramsPath(szPath);
    if (CreateFileShortcut(wszModulePath, szPath, NULL, wszModulePath2, MAKEWORD (VK_F12 , HOTKEYF_CONTROL ), _T ( "")))
    {
    
    }
    
    memset(szPath, 0, sizeof (TCHAR )* MAX_PATH);
    
    GetDesktopPath(szPath);
    if (CreateFileShortcut(wszModulePath, szPath, NULL, wszModulePath2, MAKEWORD (VK_F12 , HOTKEYF_CONTROL ), _T ( "")))
    {
            AfxMessageBox( _T ("软件安装成功欢迎使用。" ));
    }
    
    
    CoUninitialize();