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

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - 悟空空

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()

即可获得路径.