首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未识别的ProgramData环境变量

未识别的ProgramData环境变量
EN

Stack Overflow用户
提问于 2021-11-30 10:48:35
回答 1查看 148关注 0票数 0

我试图在卸载时删除一个文件夹,但它什么也不做。但是,指定路径,让它开始工作。不起作用:

代码语言:javascript
复制
 public void OnAfterInstall(SetupEventArgs e)
        {
            if (e.IsUninstalling)
            {
                
                DirectoryInfo dir = new DirectoryInfo(@"CommonAppDataFolder\myFolder");
                if ((bool)(dir?.Exists))
                {
                    dir?.Delete(true);
                }
                
            }
        }

工作:

代码语言:javascript
复制
public void OnAfterInstall(SetupEventArgs e)
        {
            if (e.IsUninstalling)
            {
                
                DirectoryInfo dir = new DirectoryInfo(@"C:\ProgramData\myFolder");
                if ((bool)(dir?.Exists))
                {
                    dir?.Delete(true);
                }
                
            }
        }

编辑:我尝试了这段代码,并得到了相同的错误:

代码语言:javascript
复制
        var programFiles = Environment.ExpandEnvironmentVariables("%ProgramFiles%");
        var manifestFile = Path.Combine(programFiles,@"\My Company\myFile.man");

        FileInfo fInfo = new FileInfo(manifestFile);
        if ((bool)(fInfo?.Exists))
        {
            FileSecurity security = fInfo.GetAccessControl();
            security.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null),
                FileSystemRights.ReadAndExecute, AccessControlType.Allow));
            fInfo.SetAccessControl(security);
        }

        var CMDCommand = $@"/C wevtutil im {manifestFile}";
        Process.Start("CMD.exe", CMDCommand);

我也试过这个:

代码语言:javascript
复制
var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
    var manifestFile = programFiles + @"\My Company\myFile.man";

C:\上运行这段代码很好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 11:05:22

您应该展开环境变量以获得实际路径。

代码语言:javascript
复制
var common = Environment.ExpandEnvironmentVariables("%ProgramData%");
var yourFolder = Path.Combine(common, "myFolder");
DirectoryInfo dir = new DirectoryInfo(yourFolder);

注意如何从环境变量的字符串中检索字符串,您需要将字符串放在%之间,还可以使用以下方法获得包含计算机上所有环境变量(自定义或标准)的Hashtable

代码语言:javascript
复制
var envs = Environment.GetEnvironmentVariables();

还可以考虑Hans Passant在其评论中强调的替代方案(或者可能是更好的选择)。Environment.GetFolderPath是一个接收枚举SpecialFolder并返回所请求的特殊文件夹的路径的方法。

这是一个更好的选择,因为它不依赖于一个环境变量,该变量可以被更改、删除,从而造成可能的错误情况。

代码语言:javascript
复制
var common = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70168052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档