我们的安装程序是用Inno Setup编写的,我们对它非常满意.然而,一些客户不断要求MSI安装程序,他们可以通过Active Directory更轻松地分发.我们已经花了一些时间,通过/LOADINF使用我们自己的选项扩展Inno Setup的机制,使安装程序与自动化和无人值守安装相得益彰.
为了满足客户要求MSI,我一直在考虑简单地将我们的常规安装程序包装在MSI中,可能是使用WIX创建的.问题是:我可以保持当前安装程序提供的高可配置性吗?在无人值守/大规模安装方案中,如何通过外部MSI公开Inno Setup安装程序的选项?
请注意,我还没有真正深入到实际挖掘MSI创建和WIX的程度.现在我只关心那些知道他们在说什么的人认为这是一种可行/合理的方法来投入我们的能量......
[编辑:]最初我认为我可以使用临时提取和执行方法,即MSI只是用作将Inno安装程序交付到目标PC并在其中以/VERYSILENT-mode 执行的容器.但我想要求MSI的客户也希望能够从中央位置卸载甚至修改安装,我想在那种情况下这是不可能的,不是吗?
PS:我们在这里也有一份WISE for MSI的旧版本,但这种体验实际上就是为什么我们开始使用Inno来开始...
我想在[Icons]使用Inno Setup的部分中使用命令提示符重新启动Windows服务.请帮我解决问题.
这是我的代码,它在远程服务器上检索文件的内容并显示为输出.
package sshexample;
import com.jcraft.jsch.*;
import java.io.*;
public class SSHexample
{
public static void main(String[] args)
{
String user = "user";
String password = "password";
String host = "192.168.100.103";
int port=22;
String remoteFile="sample.txt";
try
{
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
System.out.println("Creating SFTP Channel.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
System.out.println("SFTP Channel created.");
InputStream out= null;
out= sftpChannel.get(remoteFile);
BufferedReader br = new BufferedReader(new InputStreamReader(out));
String line;
while …Run Code Online (Sandbox Code Playgroud) 如果需要特权提升,Inno Setup安装程序具有可用于控制安装程序启动时的PrivilegesRequired指令.我希望我的安装程序甚至可以为非管理员用户工作(没有问题将我的应用程序安装到用户文件夹,而不是Program Files).所以我设置PrivilegesRequired为none(未记录的值).这使得UAC仅为管理员用户提示弹出,因此他们甚至可以安装到Program Files.没有UAC提示非管理员用户,所以即使他们可以安装应用程序(到用户文件夹).
这有一些缺点:
是否有一些方法可以在需要时(当用户选择仅由管理员帐户写入的安装文件夹时)使Inno Setup请求权限提升?
我假设在Inno Setup中没有这个设置.但可能有一个程序化的解决方案(Inno Setup Pascal脚本)或某种插件/ DLL.
请注意,即将推出的Inno Setup 6具有对非管理安装模式的内置支持.
我想将文件从一台服务器上传到另一台FTP服务器,以下是我上传文件的代码,但是它会抛出一个错误:
远程服务器返回错误:(550)文件不可用(例如,找不到文件,没有访问权限).
这是我的代码:
string CompleteDPath = "ftp URL";
string UName = "UserName";
string PWD = "Password";
WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName);
reqObj.Method = WebRequestMethods.Ftp.UploadFile;
reqObj.Credentials = new NetworkCredential(UName, PWD);
FileStream streamObj = System.IO.File.OpenRead(Server.MapPath(FileName));
byte[] buffer = new byte[streamObj.Length + 1];
streamObj.Read(buffer, 0, buffer.Length);
streamObj.Close();
streamObj = null;
reqObj.GetRequestStream().Write(buffer, 0, buffer.Length);
reqObj = null;
Run Code Online (Sandbox Code Playgroud)
你能告诉我哪里出错了吗?
我只是想用PuTTY来连接我的服务器.这些服务器仅允许来自另一个特定服务器的传入SSH连接(下面的示例中为"MySshProxyingServer").
使用Linux,这对ssh -W命令没有问题.
在PuTTY中,我找不到创建这种连接的选项.
Linux(~/.ssh/config)下的示例:
Host MyHostToConnectTo
Hostname xx.xx.xx.xx
User root
Identityfile ~/.ssh/id_rsa
ProxyCommand ssh MySshProxyServer -W %h:%p
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何在PuTTY中使用这样的配置?
我正在使用WinSCP并在每次尝试替换/覆盖文件时继续遇到此错误.我已经能够在没有任何问题之前传输/覆盖文件,但现在不能了.
确切的错误消息:
无法创建远程文件'var/lib/tomcat6/webapps /..../ myfilename.filepart'.
没有权限.
错误代码:3
来自服务器的错误消息:权限被拒绝
我已经尝试更改我成功的所有权,因为当我刷新时,从tomcat6,它现在在我的登录名下.但我仍被否认.这让我很难测试我们的报告,因为我只需要查看它是否已经在部署的应用程序中运行.
我也试过调整WinSCP偏好中的一些选项,例如Drag&Drop和Endurance,但没有任何区别.
我重新安装了PuTTY和WinSCP,但没有任何改变.
更新:
我可以通过文件路径中的1个等级替换我的文件(例如var/lib/myfolder/myproject/web-inf/report,返回1个档位到var/lib/myfolder/myproject/web-inf /)然后键入
sudo chown myuser:myuser report -R
Run Code Online (Sandbox Code Playgroud)
但我的报告会有错误,所以我必须输入
sudo chown tomca6:tomcat6 report -R然后错误将被清除,我现在可以查看我的替换文件.
这非常不方便,因为我每次都必须这样做.有什么办法可以解决这个问题吗?谢谢
从Windows 10开始,该IApplicationAssociationRegistrationUI::LaunchAdvancedAssociationUI方法不再起作用.
在Windows Vista,7和8上,它将在" 设置程序关联"页面上打开指定应用程序的"控制面板" .
在Windows 10上,它什么都不做.
它甚至记录在MSDN中:
从Windows 10开始,这不会启动关联对话框.它会向用户显示一个对话框,通知他们可以更改用于在其"设置"中打开文件扩展名的默认程序
(即使在当前版本的Windows 10中声明的第二部分也不再正确)
实际上,在Windows 10的最新版本中,控制面板不再存在.其功能已移至"应用" >"默认应用">"应用设置默认值">"应用名称"下的"设置"应用.
有没有办法以编程方式在Windows 10设置应用程序中为我的应用程序打开应用程序界面的默认设置?
或者是否有另一种方法建议应用程序允许其用户自定义Windows 10中的关联?
我正在尝试使用SF.NET协议使用C#使用SSH.NET库上传文件.以下是我正在使用的代码
FileInfo f=new FileInfo("C:\\mdu\\abcd.xml");
string uploadfile=f.FullName;
Console.WriteLine(f.Name);
Console.WriteLine("uploadfile"+uploadfile);
var client = new SftpClient(host, port, username, password);
client.Connect();
if(client.IsConnected){
Console.WriteLine("I AM CONNECTED");
}
var fileStream = new FileStream(uploadfile, FileMode.Open);
if(fileStream!=null){
Console.WriteLine("YOU ARE NOT NULL");
}
client.BufferSize = 4 * 1024;
client.UploadFile(fileStream, f.Name,null);
client.Disconnect();
client.Dispose();
Run Code Online (Sandbox Code Playgroud)
我能够连接,filestream也不是NULL.但我PermissionDeniedException在尝试上传文件时得到了.
Unhandled Exception: Renci.SshNet.Common.SftpPermissionDeniedException: Permission denied
at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)
at Renci.SshNet.SftpClient.InternalUploadFile(Stream input, String path, Flags flags, SftpUploadAsyncResult asyncResult, Action`1 uploadCallback)
at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Boolean canOverride, Action`1 uploadCallback) …Run Code Online (Sandbox Code Playgroud) 我们被要求设置从我们的一个服务器到SFTP站点的自动上传.每周一早上都会有一个文件从数据库导出到文件管理器,他们希望在星期二将文件上传到SFTP.我们使用的当前身份验证方法是用户名和密码(我相信有一个选项可以使用密钥文件,但选择了用户名/密码选项).
我想象的方法是让一个脚本坐在服务器上,由Windows任务调度程序触发,以便在特定时间(星期二)运行,该文件将获取有问题的文件,将其上传到SFTP,然后将其移动到用于备份目的的不同位置.
例如:
本地目录: C:\FileDump
SFTP目录: /Outbox/
备份目录: C:\Backup
我在这方面尝试了一些东西,WinSCP就是其中之一,以及SFTP PowerShell Snap-In,但到目前为止我没有任何工作.
这将在Windows Server 2012R2上运行.
当我运行Get-Host我的控制台主机版本是4.0.
谢谢.
inno-setup ×3
sftp ×3
c# ×2
ssh ×2
upload ×2
.net ×1
asp.net ×1
automation ×1
controlpanel ×1
ftp ×1
installer ×1
java ×1
jsch ×1
openssh ×1
pascalscript ×1
powershell ×1
privileges ×1
proxy ×1
putty ×1
ssh.net ×1
uac ×1
winapi ×1
windows ×1
windows-10 ×1
winscp ×1