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);
我试图在卸载时删除一个文件夹,但它没有任何作用。 虽然指定了路径,但让它工作。 不工作:
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);