ProgramData 环境变量无法识别 wixsharp

ProgramData environment variable not recognized wixsharp

我试图在卸载时删除一个文件夹,但它没有任何作用。 虽然指定了路径,但让它工作。 不工作:

 public void OnAfterInstall(SetupEventArgs e)
        {
            if (e.IsUninstalling)
            {
                
                DirectoryInfo dir = new DirectoryInfo(@"CommonAppDataFolder\myFolder");
                if ((bool)(dir?.Exists))
                {
                    dir?.Delete(true);
                }
                
            }
        }

工作:

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

编辑: 我试过这段代码,但遇到了同样的错误:

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

我也试过这个:

var programFiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
    var manifestFile = programFiles + @"\My Company\myFile.man";

运行 C:\ 上的这段代码工作正常..

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

var common = Environment.ExpandEnvironmentVariables("%ProgramData%");
var yourFolder = Path.Combine(common, "myFolder");
DirectoryInfo dir = new DirectoryInfo(yourFolder);

注意如何从其字符串中检索环境变量,您需要将字符串放在 % 之间,您还可以使用

var envs = Environment.GetEnvironmentVariables();

还请考虑 Hans Passant 在其评论中突出显示的替代方案(或者可能 更好的选择)。 Environment.GetFolderPath 是一种接收枚举 SpecialFolder 和 returns 请求的特殊文件夹路径的方法。

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

var common = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);