C#开发之删除桌面快捷方式小图标

MMAin.png

最近很无聊,就想着用C#做一个小工具:一键删除桌面快捷方式小箭头
然而这其中,充满了曲折...


开发中遇到的各种问题

  • 读取注册表
    1.c#中操作注册表:RegistryKey,Registry
string Shorts_Path = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons";
RegistryKey Rkey0 = Registry.LocalMachine.OpenSubKey(Shorts_Path,true);//打开注册表

上面的代码中,因为localmachine注册表是系统注册表,所以很容易发生读写错误等问题,开发过程中多次出现无法访问/创建子项/值
针对以上问题,需要打开项目属性-安全性-启用ClickOnce安全设置,这时候项目文件夹下会生成一个app.maniftest文件,需要修改其中的,需要修改原本的level值为requireAdministrator,然后取消ClickOnce安全设置,重新编译,会提示切换用户,此时等待重启再编译就不会发生异常。

Mainiftest.png

  • C#设置文件属性、判断文件是否存在、删除文件
    1.因为在搜索到的bat模式下,需要使用attrib命令,对一个iconcache文件进行属性取消,使其能够被删除,所以C#中也需要对文件进行属性设置
            string SystmDir, Udir;
            GetPathName(out SystmDir, out Udir);
            string IconCacheDir = $@"{Udir}\AppData\Local\iconcache.db";
            bool FileIsExit = File.Exists(IconCacheDir);
            if (FileIsExit == true)
            {
                File.SetAttributes(IconCacheDir,FileAttributes.Normal);
                File.Delete(IconCacheDir);
            }

以上代码不做解释,文件操作涉及到File类

  • C#获取系统环境变量
    因为在不确定用户系统位置盘符都统一,所以需要读取系统变量,读取系统环境变量需要用到Environment类
            string SystemRootDir, UserProfileDir;
            SystemRootDir = Environment.GetEnvironmentVariable("systemroot");
            UserProfileDir = Environment.GetEnvironmentVariable("userprofile");
            SystemDir = SystemRootDir;
            UProfile = UserProfileDir;

使用GetEnvironmentVariable方法分别获取systemroot和userprofile,相当于在cmd中调用%systemroot%和%userprofile%,来获取到系统位置

  • C#获取操作系统位数
    在实际调试开发的过程中发现,向localmachine 中的software节点写入子项,虽然成功写入,但是写入位置是localmacchine/software/wow6432node路径,这是因为系统对于X86和64平台的兼容性考虑,在运行时系统会自动转换,所以我们需要在项目设置-生成-平台选择64位,程序就会向正确的路径写入,同时我们也可以增加机器平台判断,来阻止用户运行
 bool MachineType = Environment.Is64BitProcess;
            if (!MachineType)
            {
                MessageBox.Show("本软件在32位操作系统上无法使用,请使用64位操作系统","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
                Application.Exit();
            }

以上使用的是Environment.Is64BitProcess方法来判断是否是64位的机器

你可能感兴趣的:(C#开发之删除桌面快捷方式小图标)