惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 【当耐特】
The Cloudflare Blog
博客园 - 聂微东
博客园 - 司徒正美
量子位
博客园 - 三生石上(FineUI控件)
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
酷 壳 – CoolShell
酷 壳 – CoolShell
Y
Y Combinator Blog
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
Blog — PlanetScale
Blog — PlanetScale
有赞技术团队
有赞技术团队
A
About on SuperTechFans

博客园 - 悟空空

Firefox IE兼容性js笔记 Firefox,Safari与IE兼容性问题整理 在cs类中调用嵌入资源并输出流 - 悟空空 - 博客园 SQL Server获取TEXT字段的内容长度 正则表达式笔记 Silverlight 4简体中文正式版脱机帮助文档安装说明 [原创]利用CPAU静默调用其它程序 - 悟空空 - 博客园 CPAU参数说明 - 悟空空 - 博客园 apache_2.2.4和php-5.3.2安装过程问题整理 Rectangle 属性 SSL网站自动安装根目录证书(整理备用)javascript - 悟空空 - 博客园 NND年年回家这么难买火车票 DoubleAnimation 类 Storyboard 类 - 悟空空 - 博客园 CroppedBitmap 类 Windows Presentation Foundation 中的 Pack URI WPF 性能分析工具 CompositionTarget 类 SolidColorBrush 类 - 悟空空 - 博客园
调用dll给winform程序创建所有用户均可使用的快捷方式
悟空空 · 2010-11-03 · via 博客园 - 悟空空

由于工作需要,在给公司做的一款小软件在启动后需要在所有客户机器上创建快捷方式

以便用户使用.由于公司内部机器的多样性,有台式机有笔记本,并且公司有域控,台式机大部分

加入到域中,但并不是所有台式机均加入到域.因此每台电脑的环境就有很大差距,权限也有很

大的不同.所以安装当前软件就需要为每台机器的所有用户创建快捷方式.

一般情况下为用户创建应用程序快捷方式使用的方式为

System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory)

此种方式返回当前用户的桌面路径.经过几番查找并未发现.net平台提供获取本机All User用户桌面路径

的方法.因此没有办法只能借助与一些windows自带的dll来进行操作.

在此我使用的是shfolder.dll   此dll在百度百科中的解释是"shfolder.dll是Windows特殊文件夹相关服

务模块,例如我的文档。属于: Microsoft Windows "

代码如下:

        #region 说明
        
//CSIDL_COMMON_DESKTOPDIRECTORY、CSIDL_COMMON_STARTMENU、CSIDL_COMMON_STARTUP
        
//CSIDL_DESKTOPDIRECTORY、CSIDL_STARTMENU、CSIDL_STARTUP
        
//上面分别为公共用户和当前用户的桌面、开始菜单、启动菜单的目录
        
//SHGetFolderPath方法根据参数"nFolder"不同值获取机器相应文件夹路径,值返回到参数"lpszPath"
        #endregion        

        [DllImport(

"shfolder.dll", CharSet = CharSet.Auto)]
        
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
        
private const int MAX_PATH = 260;
        
private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019;
        
private const int CSIDL_COMMON_STARTMENU = 0x0017;/// <summary>
        
/// 获取本机All User桌面路径(C:\Documents and Settings\All Users\桌面)
        
/// </summary>
        
/// <returns></returns>
        public static string GetAllUsersDesktopFolderPath()
        {
            StringBuilder sbPath 
= new StringBuilder(MAX_PATH);
            SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 
0, sbPath);
            
return sbPath.ToString();
        }
/// <summary>
        
/// 获取本机All User开始程序路径(C:\Documents and Settings\All Users\「开始」菜单\程序)
        
/// </summary>
        
/// <returns></returns>
        public static string GetAllUsersStartMenuPath()
        {
            StringBuilder sbPath 
= new StringBuilder(MAX_PATH);
            SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_STARTMENU, IntPtr.Zero, 
0, sbPath);
            
return sbPath.ToString();
        }

使用时直接调用相应方法GetAllUsersDesktopFolderPath()或 GetAllUsersStartMenuPath()

即可获得路径.