我如何从.NET创建/删除/读/写/ NTFS备用数据流?
如果没有本机.NET支持,我会使用哪个Win32 API?另外,我如何使用它们,因为我不认为这是记录在案的?
Windows 8下的微软SmartScreen Filter是一个小型开发者最糟糕的噩梦.
虽然我意识到最终用户的好处以及阻止恶意程序在最终用户的计算机上安装自己的有效性,但我和许多其他开发人员宁愿不支付年度续订代码签名证书的费用,或者更糟糕的是,EV代码签名证书.此外,当开发用于内部使用的产品使用来自内部CA的可信证书进行签名(存储在受信任的发布商店中)时,它们仍然会成为过滤器过度热心行为的牺牲品.
开发人员和管理员曾经可以通过在受信任的发布者存储中安装发布者的代码签名证书来禁用警告和提示.创意开发人员可以在安装必要的签名时加安装自签名代码签名证书,并使用付费的Authenticode代码签名证书加盖时间戳.之后,发布者签署的程序将受到信任,并且不会触发SmartScreen筛选器警报.从本质上讲,一旦信任,出版商就可以免除经常性费用.
最近对SmartScreen筛选器的更改(以及在Windows 8中将其作为操作系统"功能"包含在内)清楚地表明Microsoft希望您购买代码签名证书,而不是创造性地解决他们为您创建的问题.是否有人发现了一种新方法来信任默认使用自签名代码签名证书的发布者(即不显示提示)?如果没有完全关闭过滤器,最终用户可以做些什么来让SmartScreen过滤器始终信任自签名证书?
请注意,购买代码签名证书不是这个问题的答案.我正在寻找一种方法来告诉SmartScreen筛选器信任不从外部源购买证书的发布者,而是发布他们自己的组织内部使用的发布者.
更新:我想我可能找到了解决方法! 从MSDN,可以在Windows 8和Internet Explorer 10上为列为可信站点的站点禁用SmartScreen筛选器.如果有人可以验证此方法适用于从Windows 8中的可信站点下载和运行的安装程序,那将非常感谢并且可以帮助许多ISV和内部开发团队.这也是回答这个问题所需的解决方法.可以通过组策略配置可信站点,因此从那里可以很简单.
以编程方式,可以通过为计算机设置HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2!2301或HKCU\Software\Policies\Microsoft\Windows来关闭可信站点区域的SmartScreen筛选器\ CurrentVersion\Internet Settings\Zones\2!2301,用户为0,并将可信任站点添加到可信站点区域,如此问题所示.
有人可以验证我建议的解决方法在Windows 8上是否可以从可信站点下载未签名或自签名的可执行文件?我自己没有使用Windows 8,因为我的操作系统升级预算花在证书费用上.
在这个问题中,我搜索了一个解锁文件的简单解决方案.感谢所有的评论和回答,我找到了PInvoking的简单解决方案DeleteFile.
它工作,但因为我从来没有通过PInvoke(Win32)使用文件操作,我不知道是否有一些陷阱或是否有另一种方法来调用DeleteFile删除文件的备用流.
我还不知道的是,如果我必须在try/catch中包装调用,或者仅仅查看布尔结果就足够了.在我的测试中,没有提出异常,但我不知道在现实世界中会发生什么.
public class FileUnblocker {
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool DeleteFile(string name );
public bool Unblock(string fileName) {
return DeleteFile(fileName+ ":Zone.Identifier");
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码看起来可靠吗?
更新
我发布了一个不完整的方法(unblock方法没有将"Zone.Identifier"文字连接到文件名).我现在纠正了这个,抱歉.
我用 C# 编写了一个程序。如果用户勾选该框,它会将自身复制到启动。
该应用程序使用注册表项“SOFTWARE\Microsoft\Windows\CurrentVersion\Run”将自身添加到启动中。
它工作正常,除了每次重新启动机器时都会提示用户是否确定要运行该程序,因为它被 Windows 阻止,因为它“来自另一台计算机”。
有什么办法可以通过代码摆脱这个Windows“阻止”标志,以便每次程序尝试自行运行时都不会提示用户?
谢谢
我正在尝试安装一个基本上是文件观察服务的Web服务.但是当我尝试运行此命令时Installutil –i "C:\\xxx\zzzz\ServiceTest.exe"
我收到这个错误 System.IO.FileNotFoundException: Could not load file or assembly 'file:///C:\Windows\Microsoft.NET\Framework\v4.0.30319\-i
我以前经常运行这个命令,我从来没有遇到过这个错误,这次我不知道有什么不同.
我有一个excel文件,其中包含4个工作表.外部系统每天发送excel文件,我的程序读取然后将数据存储到db.我有3个文件可能已被损坏当我的程序尝试读取它给出错误"外部表不是预期的格式"的文件.当我尝试在办公室界面中打开文件时,它返回Excel Excel文件中找到不可读的内容.您要恢复此工作簿的内容吗?等等...
当我用office excel修复文件并重新保存后启动程序时,它可以工作.但我需要在程序开始读取之前修复这些文件.有办法修复办公室等excel文件吗?
我使用的是Microsoft.ACE.OLEDB.12.0;