C# 创建自动打开文档

C# 创建自动打开文档,c#,.net,windows,self-extracting,C#,.net,Windows,Self Extracting,我正在做一个有专有文件格式的项目。该项目有一个大型安装必需程序和一个不需要安装的较小查看器。我希望能够从我的主应用程序中导出“自动打开”的文件。exe-也就是说,您可以双击exe,嵌入的文件将显示出来(这是为了使未安装主应用程序的人能够查看查看器-他们将只传递文档) 我有点不知道怎么做。我一直在调查的两个想法已经走到了尽头。它们是: 1) 将文件嵌入查看器中。我可以通过VisualStudio手动完成这项工作,我已经有了一个工作演示,但我无法找到一种方法来动态完成这项工作 2) 创建一个自解压存

我正在做一个有专有文件格式的项目。该项目有一个大型安装必需程序和一个不需要安装的较小查看器。我希望能够从我的主应用程序中导出“自动打开”的文件。exe-也就是说,您可以双击exe,嵌入的文件将显示出来(这是为了使未安装主应用程序的人能够查看查看器-他们将只传递文档)

我有点不知道怎么做。我一直在调查的两个想法已经走到了尽头。它们是:

1) 将文件嵌入查看器中。我可以通过VisualStudio手动完成这项工作,我已经有了一个工作演示,但我无法找到一种方法来动态完成这项工作

2) 创建一个自解压存档,将文件和exe解压到temp,并在命令行上使用文件名运行exe。这听起来很容易,也很可能(尽管有点骇人),但我遇到了这样一个问题:归档或安装程序似乎没有必要的命令行来完成所有这些

有什么想法吗?我更喜欢第二种,因为它很简单,但第一种是因为它看起来更防弹/不太粗糙。

使用您的方法(1):

如果您使用的是.NET,则可以将查看器程序设置为一个程序集,将文档设置为另一个程序集,然后使用或类似方法将它们组合为一个最终可执行文件

ILMerge是一个命令行程序,因此您应该能够自动执行该步骤

这样一来,定制的查看器就相当容易了,基本上就是“加载我身边的另一个程序集”,也许还可以调用另一个程序集上的函数来获取数据

难题的另一部分是如何生成“文档”程序集。我不完全确定这些步骤,但看起来应该是可行的


可能使用CMake或类似工具生成VStudio项目,然后使用MSBuild将其构建到程序集中。

将exe绑定到文档中使其成为自打开文档是一个很酷的想法,但我认为这不是解决问题的最佳方案。问题在于,文档需要一个特定的查看器,而这个查看器并不容易获得。因此,尽可能容易地获取查看器


这就是Xint0在评论中的建议。找到一种方法使查看器尽可能容易地使用。不必担心盗版,因为它只是一个专有格式的查看器,所以对它感兴趣的人只有那些已经拥有无法打开的文档的人。因此,请在公司网站上发布查看器,并鼓励使用完整软件的公司在其网站上发布指向查看器的链接,以便其客户能够轻松找到它。

那么,如果您发送10份文档,您会发送10份查看器副本吗?这难道不比只发送一次查看器,然后发送文档并使用文件关联打开它们更糟糕吗?如果您将精力放在导出为HTML、PDF或其他任何人都可以阅读的常见文件格式上,会不会更好?还是这样不行?@AntonyW:文档有数百兆字节,查看器不到500KB。我愿意做的交易:)你意识到这会打开一个很大的安全漏洞吗?您能否重新考虑您的策略,并将文档导出为标准(更常见)的文件类型,如PDF或HTML?如果您想要简单,您可以制作一个批处理文件,使用阅读器打开文档并指示用户运行它。但话说回来,你可以让你的用户自己用阅读器打开文件,但从用户的角度看,你希望它是自动完成的,你可能认为他们是计算机文盲。好吧,科林,你得到了“我会放弃这项努力”的选择。我希望有一些容易解决的事情,但看起来好像不存在。我不认为这样做是一个坏主意或是一个(太严重的)安全漏洞,但我不愿意想出其他人以前没有尝试过的东西。哦,好吧!非常感谢。正如我所说,我认为自动打开/查看文档是一个很酷的想法。在某种程度上,我希望看到它的实现,因为它很酷。然而,我仍然认为,让你的观众分布是你真正需要解决的问题。