![](/img/trans.png)
[英]Why does my command line application error out on remote assembly when ran outside Visual Studio?
[英]Why is my clipboard-manipulating application behaving differently when run outside of Visual Studio?
我有一个控制台应用程序,其“输出类型”为“ Windows应用程序”(以实现无头行为,即没有UI,没有控制台窗口)。 目的是“清除” Windows剪贴板中的文本,即修剪所有前导和尾随空白并删除格式。
调试时它很好用,但是当我从资源管理器中运行它时,它只是清除剪贴板中的内容。
这是我的代码:
[STAThread]
internal static void Main(string[] args)
{
var currentClipboardText = System.Windows.Clipboard.GetText();
// only if the clipboard has text; leave any other content intact.
if(!string.IsNullOrEmpty(currentClipboardText))
{
currentClipboardText = currentClipboardText.Trim();
var pattern = @"[\t\r\n\v\f\u2028\u2029]"; // match vert. whitesp & tabs
currentClipboardText = Regex.Replace(currentClipboardText, pattern, " ");
System.Windows.Clipboard.SetDataObject(currentClipboardText);
}
}
以MS Word格式格式化的示例输入,已复制到剪贴板:
在dubugger中运行程序后(无论是在“调试”模式还是在“发布”模式,都没有区别),以下是从剪贴板粘贴回Word的结果:
如果我做同样的练习,但是通过在Windows资源管理器中(即\\bin\\Debug
目录中)双击该程序来运行该程序,则剪贴板上没有文本可粘贴到Word中:
这里有什么区别? 为什么在Visual Studio之外无法正常工作?
默认情况下,当应用程序退出时,带有SetDataObject的系统剪贴板上放置的数据会自动从剪贴板中清除。
使用System.Windows.Clipboard.SetDataObject(currentClipboardText, true);
而是在应用程序退出后将数据保留在剪贴板中。
我已经测试了您的代码,并且在调试时不起作用。 我改变了这一行:
System.Windows.Clipboard.SetDataObject(currentClipboardText);
附:
System.Windows.Clipboard.SetText(currentClipboardText);
它在调试时和不在调试时都有效。 我认为发生的事情是Word不再将DataObject识别为可粘贴的文本。
我希望这能解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.