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

2020-08-23  本文已影响0人  就是很皮
MMAin.png

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


开发中遇到的各种问题

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
            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类

            string SystemRootDir, UserProfileDir;
            SystemRootDir = Environment.GetEnvironmentVariable("systemroot");
            UserProfileDir = Environment.GetEnvironmentVariable("userprofile");
            SystemDir = SystemRootDir;
            UProfile = UserProfileDir;

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

 bool MachineType = Environment.Is64BitProcess;
            if (!MachineType)
            {
                MessageBox.Show("本软件在32位操作系统上无法使用,请使用64位操作系统","错误",MessageBoxButtons.OK,MessageBoxIcon.Error);
                Application.Exit();
            }

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

上一篇 下一篇

猜你喜欢

热点阅读