为了节省带宽/空间以及防止意外干扰,数据库产品的安装文件(称之为Ajax)已被压缩(调用该文件"AJAX_Install_Files.ZIP).我想让Inno-Setup"安装" (即,复制)AJAX_Install_Files.ZIP文件到目标,然后将文件解压缩到.ZIP文件所在的同一文件夹中.后续程序将由Inno安装程序启动以实际运行产品安装"Ajax ".
我查看了Inno Setup网站上的文档,FAQ和KB,除了编写Pascal脚本(代码)之外,这似乎不可能 - 这是正确的,还是有任何替代解决方案?
我需要C#编程方面的帮助; 我是新手,我来自C背景.我有一个这样的控制台应用程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Add_Function
{
class Program
{
static void Main(string[] args)
{
int a;
int b;
int c;
Console.WriteLine("Enter value of 'a':");
a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter value of 'b':");
b = Convert.ToInt32(Console.ReadLine());
//why can't I not use it this way?
c = Add(a, b);
Console.WriteLine("a + b = {0}", c);
}//END Main
public int Add(int x, int y)
{
int result = x + y;
return result;
}//END Add
}//END Program …Run Code Online (Sandbox Code Playgroud) 我正在以编程方式创建脚本文件,并调用psftp.exe如下:
psftp user@hostname.com -pw password -b psftpscript.txt
Run Code Online (Sandbox Code Playgroud)
但它会提示用户输入
服务器的主机密钥未缓存在注册表中.您无法保证服务器是您认为的计算机.服务器的rsa2密钥指纹是:[ssh-rsa 1024 somekey]如果你信任这个主机,输入"y"将密钥添加到PuTTY的缓存并继续连接.如果要仅进行一次连接,而不将密钥添加到缓存中,请输入"n".如果您不信任此主机,请按Return键放弃连接.将密钥存储在缓存中?(Y/N)
我需要它完全迅速,自动.我尝试了-batch参数,但它只是放弃了连接
如何检测用户是否已安装软件,如果是,如何提供删除旧版本的可能性?
我写了一些行来检查.这是正确的吗?如果这是正确的,那么我该如何让用户选择是继续安装还是卸载旧版本?
#define UNINSTKEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\setupname_is1"
var
uninstallPath: string;
function InitializeSetup: Boolean;
begin
if (RegQueryStringValue(HKLM,'{#UNINSTKEY}','UninstallString',uninstallPath)) and
(uninstallPath <> '') and (fileexists(uninstallPath)) then
begin
Result :=
(MsgBox(CustomMessage('NotVerifiedVersionFound'), mbConfirmation,
MB_YESNO or MB_DEFBUTTON2) = IDYES);
end;
{ ... }
end;
Run Code Online (Sandbox Code Playgroud) 在Windows 7的Windows资源管理器列表视图(据称根本不是列表视图)的详细信息视图中,您可以在第一个(名称)列中启动选择选取框.你只需要在实际名称之外开始.

"详细信息"视图中的默认样式列表视图控件也是如此.
但是,如果将列表视图控件设置为Explorer样式(使用SetWindowTheme),那么应该模仿Windows资源管理器,这将不再起作用.您只能在第二列和后面的列中开始选择.
SetWindowTheme(listView1.Handle, "explorer", null);
Run Code Online (Sandbox Code Playgroud)
有没有办法让列表视图模仿资源管理器的选择样式?
我想没有设置来启用这种行为,这必须编码.喜欢处理鼠标并触发选择.但我不知道该怎么做.
谢谢.
Ntb,我正在使用C++ Builder,但这应该是纯粹的Win32问题.我也用WinForms进行了测试(因此上面的C#示例).
我有一个Inno安装项目.一切都很好,但我没有在"程序和功能"控制面板区域中看到应用程序图标.我确实在其他地方看到了这个图标.
脚本文件具有以下内容:
[Setup]
SetupIconFile={#MySetupImageIco}
Run Code Online (Sandbox Code Playgroud)
是否还需要设置其他内容以使应用程序图标显示在"程序和功能"控制面板小程序中?我正在测试Windows 8.1.
更新:
根据评论,我尝试在我的脚本中设置:
UninstallDisplayIcon={#MySetupImageIco}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这并没有在添加/删除程序和功能控制面板小程序中产生图标.
更新#2:
获胜的解决方案是:
UninstallDisplayIcon={app}\{#MyAppExeName}
Run Code Online (Sandbox Code Playgroud)
当然,#define MyAppExeName "whatever.exe"在脚本的顶部必须有一个以上.有趣的是,当我指定ico文件的路径时,我没有成功.适用于Windows 8和8.1的Inno Setup需要我刚才所说的内容.Windows 7使用UninstallDisplayIcon并指定ICO的路径,或者没有它,只是Windows 8和8.1有点不同.
与Azure WebJobs SDK关联的大多数示例都具有如下所示的启动代码:
static void Main()
{
JobHost h = new JobHost();
h.RunAndBlock();
}
Run Code Online (Sandbox Code Playgroud)
但是,您也可以在不创建如下JobHost对象的情况下启动WebJob :
static void Main()
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
在什么情况下是JobHost必要的?
环境:我在64位Windows 7上使用Sun Java JDK 1.8.0_60,使用Spring Integration 4.1.6(内部似乎使用Apache Commons Net 3.3进行FTPS访问).
我正在尝试与我们的应用程序集成,从客户端的FTPS服务器自动下载.我已经使用Spring Integration成功完成了使用Spring Integration的SFTP服务器而没有遇到任何问题,但是这是客户第一次要求我们使用FTPS,并且让它连接起来非常令人费解.虽然在我的实际应用程序中,我正在使用XML bean配置Spring Integration,试图了解什么不起作用我正在使用以下测试代码(虽然我在这里匿名实际的主机/用户名/密码):
final DefaultFtpsSessionFactory sessionFactory = new DefaultFtpsSessionFactory();
sessionFactory.setHost("XXXXXXXXX");
sessionFactory.setPort(990);
sessionFactory.setUsername("XXXXXXX");
sessionFactory.setPassword("XXXXXXX");
sessionFactory.setClientMode(2);
sessionFactory.setFileType(2);
sessionFactory.setUseClientMode(true);
sessionFactory.setImplicit(true);
sessionFactory.setTrustManager(TrustManagerUtils.getAcceptAllTrustManager());
sessionFactory.setProt("P");
sessionFactory.setProtocol("TLSv1.2");
sessionFactory.setProtocols(new String[]{"TLSv1.2"});
sessionFactory.setSessionCreation(true);
sessionFactory.setCipherSuites(new String[]{"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"});
final FtpSession session = sessionFactory.getSession();
//try {
final FTPFile[] ftpFiles = session.list("/");
logger.debug("FtpFiles: {}", (Object[]) ftpFiles);
//} catch (Exception ignored ) {}
session.close();
Run Code Online (Sandbox Code Playgroud)
我正在运行此代码以-Djavax.net.debug=all打印所有TLS调试信息.
与FTPS服务器的主要"控制"连接工作正常,但是当它试图打开列表的数据连接(或我尝试过的任何其他数据连接)时,我得到了一个javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake,由...引起的java.io.EOFException: SSL peer shut down incorrectly.如果我取消注释session.list …
一般信息
我还在学习C#.为了帮助自己,我正在尝试创建一个程序,它将自动将我的所有本地项目与我的FTP服务器上的文件夹同步.这样,无论我是在学校还是在家,我总是可以使用相同的项目.
我知道像Dropbox这样的程序已经为我做了这个,但我想创造类似的东西,我自己会教我很多东西.
问题
我迈向目标的第一步是从我的FTP服务器下载所有文件,子目录和子文件.我已经设法从下面的代码下载目录中的所有文件.但是,我的代码只列出了主目录中的文件夹名称和文件.子文件夹和子文件永远不会返回,也永远不会下载.除此之外,服务器返回550错误,因为我正在尝试下载文件夹,就像它们是文件一样.我已经在这上面了4个多小时了,但我找不到任何关于如何解决这些问题并让它发挥作用的事情.因此,我希望你们能帮助我:)
码
public string[] GetFileList()
{
string[] downloadFiles;
StringBuilder result = new StringBuilder();
WebResponse response = null;
StreamReader reader = null;
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(ftpUserName, ftpPassWord);
request.KeepAlive = false;
request.UsePassive = false;
response = request.GetResponse();
reader = new StreamReader(response.GetResponseStream());
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
result.Remove(result.ToString().LastIndexOf('\n'), 1);
return result.ToString().Split('\n');
}
catch (Exception ex)
{
if …Run Code Online (Sandbox Code Playgroud) 嗨我正在使用python并尝试连接到sftp并想从那里检索xml文件并需要放在我的本地系统中,下面是代码
import paramiko
sftpURL = 'sftp.somewebsite.com'
sftpUser = 'user_name'
sftpPass = 'password'
ssh = paramiko.SSHClient()
# automatically add keys without requiring human intervention
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
ssh.connect(sftpURL, username=sftpUser, password=sftpPass)
ftp = ssh.open_sftp()
files = ftp.listdir()
print files
Run Code Online (Sandbox Code Playgroud)
这里连接已成功完成,现在我想查看所有文件夹和所有文件,并需要输入所需的文件夹以从那里检索xml文件.
最后我的目的是在连接到sftp服务器后查看所有文件夹和文件.在上面的代码中我使用了ftp.listdir()通过它获得输出,如下所示
['.bash_logout', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml']
Run Code Online (Sandbox Code Playgroud)
我想知道这些是否是唯一存在的文件?
我上面使用的命令也是查看文件夹的权利吗?
查看所有文件夹和文件的命令是什么