美文网首页
C#开发之删除桌面快捷方式小图标

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

作者: 就是很皮 | 来源:发表于2020-08-23 21:20 被阅读0次
    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文件,需要修改其中的<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />,需要修改原本的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#开发之删除桌面快捷方式小图标

          本文链接:https://www.haomeiwen.com/subject/lmywjktx.html