我创建了一个Windows窗体应用程序并使用ClickOnce发布它。它使用应用程序文件生成了安装文件,并且它也适用于更新检查。
但是在“Application Files”文件夹中,它显示了我使用过的所有DLL文件的已部署文件。向用户显示这些dll
名称毫无意义,我不想透露我使用过的那些DLL文件。那么是否可以只向用户提供设置文件,以及之前执行的操作?
我正在使用Visual Studio 2013 Express Edition(桌面版)。或者ClickOnce的另一种方式?但我发现ClickOnce是最好的。
我尝试了Ilmerge
,但它没有合并Sqlite.Interop.dll
并且正在抛出错误。在研究了很多之后,我发现问题出在SQLite本身。
答案 0 :(得分:4)
您应该围绕ClickOnce创建一个包装器设置。
我为此目的使用InnoSetup,这是开源的
基本设置可能如下所示:
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "..."
#define MyAppVersion "1"
#define MyAppPublisher "..."
#define MyAppURL "http://..."
#define MyAppExeName "setup.exe"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{...-...-...-....-.........}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
CreateAppDir=no
LicenseFile={#SourcePath}resources\license.txt
OutputDir={#SourcePath}setup\disk
OutputBaseFilename=setup
SetupIconFile={#SourcePath}resources\app.ico
WizardImageFile={#SourcePath}resources\app.bmp
WizardSmallImageFile={#SourcePath}resources\app.bmp
Compression=lzma
SolidCompression=yes
Uninstallable=no
DisableFinishedPage=yes
;PrivilegesRequired=none
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "german"; MessagesFile: "compiler:Languages\German.isl"
[Files]
Source: {#SourcePath}files\*; DestDir: "{tmp}"; Flags: ignoreversion
[Run]
Filename: {tmp}\setup.exe; Parameters: "install"
注意:{#SourcePath}files\*
应指向setup.exe / MyApp.application文件和Application Files文件夹所在的目录。
不是测试,但应该给你一个良好的开端。
结果是一个包含您需要的所有内容的exe文件。 在创建新设置之前,不要忘记清理ClickOnce目录,否则Application Files文件夹也将包含最新版本。
答案 1 :(得分:1)
由于我已经对上述内容进行了一些改进,因此我会向所有关注的人发布此内容。
以上代码运作良好,但值得注意以下事项:
您可能需要在上面给出的代码中更改对{tmp}的引用。 InnoSetup在安装完成后删除{tmp}文件夹,对我而言,这导致ClickOnce安装程序崩溃并丢失文件错误。
也可能想考虑添加:Flags:" postinstall"参数:" install&#34 ;;我的应用程序在从InnoSetup启动时不允许拖放,直到我添加它。
最后,我必须在files部分的树结构中明确列出每个文件夹。复制到目标文件夹时使用*不保留此选项(复制时它或完全忽略文件夹)。可能有一个InnoSetup选项/标志可以使这项工作,但我没有调查它。
[Files]
Source: "{#SourcePath1}\*"; DestDir: "{app}"; Flags: ignoreversion
Source: "{#SourcePath1}\Application Files\MyApp\*"; DestDir: "{app}\Application Files\MyApp"; Flags: ignoreversion
Source: "{#SourcePath1}\Application Files\MyApp\Resources\*"; DestDir: "{app}\Application Files\MyApp\Resources"; Flags: ignoreversion