我试图在卸载时删除一个文件夹,但它什么也不做。但是,指定路径,让它开始工作。不起作用:
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:\上运行这段代码很好。
发布于 2021-11-30 11:05:22
您应该展开环境变量以获得实际路径。
var common = Environment.ExpandEnvironmentVariables("%ProgramData%");
var yourFolder = Path.Combine(common, "myFolder");
DirectoryInfo dir = new DirectoryInfo(yourFolder);注意如何从环境变量的字符串中检索字符串,您需要将字符串放在%之间,还可以使用以下方法获得包含计算机上所有环境变量(自定义或标准)的Hashtable
var envs = Environment.GetEnvironmentVariables();还可以考虑Hans Passant在其评论中强调的替代方案(或者可能是更好的选择)。Environment.GetFolderPath是一个接收枚举SpecialFolder并返回所请求的特殊文件夹的路径的方法。
这是一个更好的选择,因为它不依赖于一个环境变量,该变量可以被更改、删除,从而造成可能的错误情况。
var common = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);https://stackoverflow.com/questions/70168052
复制相似问题