首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何解决Perl的语言环境设置警告?

如何解决Perl的语言环境设置警告?

提问于 2017-12-12 09:08:08
回答 2关注 0查看 731

当我跑步时perl,我得到警告:

perl:警告:设置区域设置失败。

perl:警告:请检查您的区域设置:

LANGUAGE =(unset),

LC_ALL =(未设定),

LANG =“en_US.UTF-8”

支持并安装在您的系统上。

perl:警告:回落到标准语言环境(“C”)。

我如何解决它?

回答 10

Rom_z

发布于 2018-02-07 02:44:05

事实上,你可以创建一个自定义MSBuild任务来执行T4模板,并且该模板需要在编译Wix项目之前输出WXS。这允许你自动包含编译另一个解决方案的所有程序集输出(这意味着你在添加新程序集时不再需要编辑WXS)。

goodbad

发布于 2018-02-07 01:12:13

以下技巧是关于在单独的Wix片段中定义可重用的ComponentGroup定义:

目录混叠

组件组片段不需要知道主要产品wxs定义的目录:

代码语言:javascript
运行
AI代码解释
复制
<DirectoryRef Id="component1InstallFolder">
...
</DirectoryRef>

然后,主产品可以将其中一个目录(例如:“productInstallFolder”)按照以下代码进行修改

代码语言:javascript
运行
AI代码解释
复制
<Directory Id="productInstallFolder" Name="ProductName">
   <!-- not subfolders (because no Name attribute) but aliases for parent! -->
   <Directory Id="component1InstallFolder"/> 
   <Directory Id="component2InstallFolder"/> 
</Directory>

依赖关系图

ComponentGroup元素可以包含ComponentGroupRef子元素。如果你有大量的可重用组件池,并且在它们之间有一个复杂的依赖关系图,只需要为每个组件在自己的片段中设置ComponentGroup,并声明如下所示的依赖关系:

代码语言:javascript
运行
AI代码解释
复制
<ComponentGroup Id="B">
   <ComponentRef Id="_B" />
   <ComponentGroupRef Id="A">
</ComponentGroup>

如果现在在你的设置中引用组件组“B”,因为它是你的应用程序的直接依赖项,那么即使应用程序作者从未意识到它是“B”的依赖项,它也会自动地将组件组“A”参与进来。只要你没有任何循环依赖项,它就可以“工作”。

可重用wixlib

如果使用lit.exe将大型池可重用组件编译为可重复使用的wixlib,上述依赖关系图想法效果最佳。 创建应用程序设置时,可以像wixobj文件一样引用此wixlib。 candle.exe链接器将自动消除任何未被主要产品wxs文件“拉入”的片段。

BlackKnight

发布于 2018-02-07 00:35:53

Javascript CustomActions

JavaScript用于MSI自定义操作是错误的原因主要是:很难调试,并且不可靠。实际上,调试并不难,只是和C++不一样。在Javascript中编写CustomActions非常容易,比C++容易,快速,并且可靠。

但是有一个缺点:JavaScriptCustomActions可以通过Orca提取,而C/C++CA则需要reverse-engineering。

使用脚本,只需从某种结构开始。

CustomAction的JavaScript“样板”代码:

代码语言:javascript
运行
AI代码解释
复制
//
// CustomActions.js 
// 
// Template for WIX Custom Actions written in Javascript.
// 
// 
// Mon, 23 Nov 2009  10:54
// 
// ===================================================================


// http://msdn.microsoft.com/en-us/library/sfw6660x(VS.85).aspx
var Buttons = {
        OkOnly           : 0,
        OkCancel         : 1,
        AbortRetryIgnore : 2,
        YesNoCancel      : 3
};

var Icons = {
        Critical         : 16,
        Question         : 32,
        Exclamation      : 48,
        Information      : 64
};

var MsgKind = {
        Error            : 0x01000000,
        Warning          : 0x02000000,
        User             : 0x03000000,
        Log              : 0x04000000
};

// http://msdn.microsoft.com/en-us/library/aa371254(VS.85).aspx
var MsiActionStatus = {
        None             : 0,
        Ok               : 1, // success
        Cancel           : 2,
        Abort            : 3,
        Retry            : 4, // aka suspend?
        Ignore           : 5  // skip remaining actions; this is not an error.
};


function MyCustomActionInJavascript_CA() {
    try {
        LogMessage("Hello from MyCustomActionInJavascript");
        // ...do work here...
        LogMessage("Goodbye from MyCustomActionInJavascript");
    }
    catch (exc1) {
        Session.Property("CA_EXCEPTION") = exc1.message ;
        LogException(exc1);
        return MsiActionStatus.Abort;
    }
    return MsiActionStatus.Ok;
}

// Pop a message box.  also spool a message into the MSI log, if it is enabled. 
function LogException(exc) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction: Exception: 0x" + decimalToHexString(exc.number) + " : " + exc.message;
    Session.Message(MsgKind.Error + Icons.Critical + Buttons.btnOkOnly, record);
}


// spool an informational message into the MSI log, if it is enabled. 
function LogMessage(msg) {
    var record = Session.Installer.CreateRecord(0);
    record.StringData(0) = "CustomAction:: " + msg;
    Session.Message(MsgKind.Log, record);
}


// http://msdn.microsoft.com/en-us/library/d5fk67ky(VS.85).aspx
var WindowStyle = {
    Hidden : 0,
    Minimized : 1,
    Maximized : 2
};

// http://msdn.microsoft.com/en-us/library/314cz14s(v=VS.85).aspx
var OpenMode = {
    ForReading : 1,
    ForWriting : 2,
    ForAppending : 8
};

// http://msdn.microsoft.com/en-us/library/a72y2t1c(v=VS.85).aspx
var SpecialFolders = {
    WindowsFolder : 0, 
    SystemFolder :  1, 
    TemporaryFolder : 2
};

// Run a command via cmd.exe from within the MSI
function RunCmd(command)
{
    var wshell = new ActiveXObject("WScript.Shell");
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var tmpdir = fso.GetSpecialFolder(SpecialFolders.TemporaryFolder);
    var tmpFileName = fso.BuildPath(tmpdir, fso.GetTempName());

    LogMessage("shell.Run("+command+")");

    // use cmd.exe to redirect the output
    var rc = wshell.Run("%comspec% /c " + command + "> " + tmpFileName, WindowStyle.Hidden, true);
    LogMessage("shell.Run rc = "  + rc);

    // here, optionally parse the output of the command 
    if (parseOutput) {
        var textStream = fso.OpenTextFile(tmpFileName, OpenMode.ForReading);
        while (!textStream.AtEndOfStream) {
            var oneLine = textStream.ReadLine();
            var line = ParseOneLine(oneLine);
                ...
        }
        textStream.Close();
    }

    if (deleteOutput) {
        fso.DeleteFile(tmpFileName);
    }

    return {
        rc : rc,
        outputfile : (deleteOutput) ? null : tmpFileName
    };
}

然后,使用以下内容注册自定义操作:

代码语言:javascript
运行
AI代码解释
复制
<Fragment>
  <Binary Id="IisScript_CA" SourceFile="CustomActions.js" />

  <CustomAction Id="CA.MyCustomAction"
              BinaryKey="IisScript_CA"
              JScriptCall="MyCustomActionInJavascript_CA"
              Execute="immediate"
              Return="check" />
</Fragmemt>

当然,您可以根据需要插入尽可能多的Javascript函数,以执行多个自定义操作。 举个例子:我用Javascript在IIS上做了一个WMI查询,以获得一个可以安装ISAPI过滤器的现有网站列表。 这个列表用来填充稍后在UI序列中显示的列表框。

在IIS 7上,IIS没有WMI提供程序,所以我使用了shell.Run()方法调用appcmd.exe来执行工作。

关于Javascript CustomActions

和开发者交流更多问题细节吧,去 写回答
相关文章
js停止setInterval 调用
setInterval()返回一个interval ID,您可以将其传递给clearInterval():
IT工作者
2022/01/18
14.1K0
setInterval停止
实现代码如下: var refreshIntervalId = setInterval(fname, 10000); /* later */ clearInterval(refreshIntervalId); var intervalID = setInterval(func, [delay, arg1, arg2, ...]); var intervalID = setInterval(function[, delay]); var intervalID = setInterval(code, [d
IT工作者
2021/12/29
2.8K0
JavaScript定时调用函数(SetInterval与setTimeout)
setTimeout和setInterval的语法相同。它们都有两个参数,一个是将要执行的代码字符串,还有一个是以毫秒为单位的时间间隔,当过了那个时间段之后就将执行那段代码。
aehyok
2018/09/11
1.5K0
js中settimeout和setInterval区别_JavaScript set
注:调用过程中,可以使用clearTimeout(id_of_settimeout)终止
全栈程序员站长
2022/11/09
1.9K0
JavaScript如何用setTimeout模拟setInterval
思路就是递归调用 function myInterval(fun,time){ function inside(){ fun(); setTimeout(inside,time); } setTimeout(inside,time); } myInterval(fn,1000); function fn(){ console.log('嘿嘿'); }
henu_Newxc03
2022/05/05
9450
JavaScript 定时器 setTimeout、setInterval
定时器在javascript中的作用 1、制作动画 2、异步操作 3、函数缓冲与节流 定时器类型及语法 示例代码如下: /* 定时器: setTimeout 只执行一次的定时器 clearTimeout 关闭只执行一次的定时器 setInterval 反复执行的定时器 clearInterval 关闭反复执行的定时器 */ var time1 = setTimeout(myalert,2000); var time2 = setInterval(
Devops海洋的渔夫
2019/05/30
9910
javascript中的setTimeout() 方法和clearInterval() 方法和setInterval() 方法
语法 setTimeout(code,millisec) 参数 描述 code 必需。要调用的函数后要执行的 JavaScript 代码串。 millisec 必需。在执行代码前需等待的毫秒数。 提示和注释 提示:setTimeout() 只执行 code 一次。 <html> <head> <script type="text/javascript"> function timedMsg() { var t=setTimeout("alert('5 seconds!')",5000) } </scrip
用户7657330
2020/08/14
1.3K0
JavaScript中的链式调用
链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧。
WindRunnerMax
2020/11/26
4.2K0
JavaScript中的链式调用
链模式是一种链式调用的方式,准确来说不属于通常定义的设计模式范畴,但链式调用是一种非常有用的代码构建技巧。
WindRunnerMax
2020/11/27
9310
setInterval
坍圮的殿堂总还是庙,冷落的圣像依然是神。 在前端开发中我们或许想定时做一些操作 可以使用一个setInterval函数去做 // 定时控制台打印ruben setInterval(function () { console.log("ruben"); }, 1000); // 定时控制台打印achao,注意这里是使用字符串形式写法 setInterval('console.log("achao");', 1000); 可以打开控制台看到效果
阿超
2022/08/16
1.1K0
setInterval
在 Node 中调用 Python
在 Node 中如何调用 Python 的方法?通常可以通过 REST 接口或者 RPC 的方式来完成,但是某些时候我们仅仅只需要调用对方几个很简单的方法,这种情况下去构建一个提供 REST 接口的服务或者两者对接实现 RPC 调用,这种做法的成本显然有点高。本文将会介绍一种更轻量的调用方式。
凌虚
2020/07/17
5.8K0
在Java中调用Python
在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢。当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单。恰好我在项目中就遇到了这个问题,需要在Java程序中调用Python程序。关于在Java中调用Python程序的实现,根据不同的用途可以使用多种不同的方法,在这里就将在Java中调用Python程序的方式做一个总结。
编程随笔
2019/09/11
5.2K0
在Java中调用Python
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
全栈程序员站长
2022/07/05
2K0
在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查。我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数据费时费电;二是流量贵如金那。我个人比较推荐的做法是使用Java或PHP等开发接口或者编写WebService进行数据库的增删该查,然后Android调用接口或者WebService进行数据的交互。本文就给大家讲解在Android中如何调用远程服务器端提供的WebService。 既然是调用WebService
欢醉
2018/01/22
2.4K0
面试官:如何停止 JavaScript 中的 forEach 循环?
我对结果感到沮丧,问面试官:“为什么?实际上可以停止 JavaScript 中的 forEach 循环吗?”
前端达人
2023/08/31
2970
面试官:如何停止 JavaScript 中的 forEach 循环?
利用setTimeout和SetInterval构建Javascript计时器
看到了一篇深入浅出的讲解setTimeout和setInterval的例子,直接讲英文贴出来吧,也不是很难。
大江小浪
2018/07/24
8200
JavaScript 中的尾调用和优化
本文由 IMWeb 社区授权转载自 css88.com。点击阅读原文查看 IMWeb 社区更多精彩文章。 尾调用(Tail Call) 尾调用是函数式编程里比较重要的一个概念,它的意思是在函数的执行过程中,如果最后一个动作是一个函数的调用,即这个调用的返回值被当前函数直接返回,则称为尾调用,如下所示: function f(x) {  return g(x)} 在 f 函数中,最后一步操作是调用 g 函数,并且调用 g 函数的返回值被 f 函数直接返回,这就是尾调用。而下面这个栗子就不是尾调用: funct
用户1097444
2022/06/29
1.2K0
JavaScript 中的尾调用和优化
nginx在windows系统中如何启动、重启、停止
查看nginx的版本号:nginx -v 启动nginx:start nginx 快速停止或关闭nginx:nginx -s stop 正常停止或关闭nginx:nginx -s quit 配置文件nginx.conf修改重装载命令:nginx -s reload
似水的流年
2019/12/13
15.3K0
javascript当中时间控制setTimeout和setInterval的用法
9.时间控制setTimeout和setInterval 马克-to-win:下个例子说明每秒刷新时间如何实现。(利用setTimeout方法): setTimeout和setInterval的区别是:setTimeout只执行1次,而setInterval可以无限执行。 例 1.9.1(setTimeoutIEFF.html) <HTML> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"/> <SCRIPT LANGUAGE="JavaScript"> <!-- function time() { var now = new Date(); var y = now.getFullYear(); var m = now.getMonth()+1; var d = now.getDate(); var x = now.getDay(); var hour = now.getHours(); var day =new Array("日","一","二","三","四","五","六"); var xingqi = day[x]; var mi =now.getMinutes(); var s = now.getSeconds(); var t =document.getElementById("t"); t.innerHTML="今天是"+y+"年"+m+"月"+d+"日"+"星期"+xingqi+","+hour+":"+mi+":"+s; setTimeout("time()",1000); } //--> </SCRIPT> </HEAD> <BODY οnlοad="time()"> <div id="t"></div> </BODY> </HTML> setInterval&clearInterval
马克java社区
2021/01/18
6540
javascript当中时间控制setTimeout和setInterval的用法
在 JavaScript 中轻松处理 this [每日前端夜话0xD1]
我喜欢 JavaScript 中能够更改函数执行上下文(也称为 this)的特性。
疯狂的技术宅
2019/10/17
2.5K0

相似问题

在缓冲过程中调用 TXLivePlayer 的stopPlay 停止无效?

1327

视频直播sdk,调用停止摄像头预览的函数报错?

0490

在JavaScript中删除数组元素?

2322

iOS 无法正常调用 COS JavaScript SDK 上传文件?

1539

有没有JavaScript直接调用的sdk(不是指nodejs)?

0125
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档